DirectedPanGestureRecognizer
DirectedPanGestureRecognizer 是一个 UIPanGestureRecognizer 子类,提供更丰富的 API 用于在 Swift 3 中处理拖拽手势。
它基于我的老旧的 CXSwipeGestureRecognizer 库。它并不会完全废弃那个项目 —— 虽然大部分只是用 Swift 重新编写的,但一些有争议的功能已被删除。
安装
pod 'DirectedPanGestureRecognizer', '~> 1.0'
使用方法
let gestureRecognizer = DirectedPanGestureRecognizer()
gestureRecognizer.delegate = self
view.addGestureRecognizer(gestureRecognizer)
特点
✓ 跟踪手势的初始状态
if (gestureRecognizer.initialDirection == .up) {
if (gestureRecognizer.direction == .down) {
print("Gesture recognizer started swiping upwards and then changed direction")
}
}
✓ 强制手势的起始方向
func gestureRecognizerShouldBegin(gestureRecognizer: UIGestureRecognizer) -> Bool {
switch gestureRecognizer {
case let panGestureRecognizer as DirectedPanGestureRecognizer where panGestureRecognizer == self.panGestureRecognizer:
return panGestureRecognizer.direction == .left
default:
return true
}
}
✓ 委派start
、update
、cancel
和finish
事件的协议方法
func directedPanGestureRecognizer(didStart gestureRecognizer: DirectedPanGestureRecognizer) {
print("Gesture recognizer started")
}
func directedPanGestureRecognizer(didUpdate gestureRecognizer: DirectedPanGestureRecognizer) {
print("Gesture recognizer updated")
}
func directedPanGestureRecognizer(didCancel gestureRecognizer: DirectedPanGestureRecognizer) {
print("Gesture recognizer cancelled")
}
func directedPanGestureRecognizer(didFinish gestureRecognizer: DirectedPanGestureRecognizer) {
print("Gesture recognizer finished")
}
✓ 便捷方法,包括location
、direction
、translation
和velocity
let location = gestureRecognizer.location // CGPoint?
let direction = gestureRecognizer.direction // DirectedPanGestureRecognizer.Direction?
let translation = gestureRecognizer.translation(inDirection: .right) // CGFloat
let velocity = gestureRecognizer.velocity(inDirection: .right) // CGFloat
✓ IBDesignable
参数用于强制设定最小翻译和速度
gestureRecognizer.minimumTranslation = 64.0
gestureRecognizer.minimumVelocity = 256.0