屏幕旋转后 UIPanGestureRecognizer 无法进入 .ended 状态
UIPanGestureRecognizer fails to enter .ended state after screen rotation
当 UIPanGestureRecognizer
处于 .changed
状态时,我在处理屏幕旋转时遇到问题。我的处理逻辑类似于:
@objc fileprivate func handlePanGesture() {
let state = self.panGestureRecognizer.state
if state == .began {
// Log beginning state
} else if state == .changed {
// Track position, update constraints
} else if state == .ended {
// Reset and prepare for new gesture
}
}
一切似乎都运行良好,但是当设备旋转到新的方向(没有抬起手指)时,手势识别器停止接收活动触摸的更新,但永远不会触发 handlePanGesture()
.ended
状态集。
现在我正在处理这个问题,方法是寻找 viewWillTransition(to:with:)
并在发生这种情况时清理状态,但是这种方法会失败,例如 iPad 从纵向向右旋转- 向上到纵向颠倒 - 从来没有任何尺寸过渡。有没有什么可以取消旋转时的手势识别器(并触发对 handlePanGesture()
的调用)?
您还需要检查 .cancelled
状态。
顺便说一句,打开状态而不是 if, else if, else if, else if
当 UIPanGestureRecognizer
处于 .changed
状态时,我在处理屏幕旋转时遇到问题。我的处理逻辑类似于:
@objc fileprivate func handlePanGesture() {
let state = self.panGestureRecognizer.state
if state == .began {
// Log beginning state
} else if state == .changed {
// Track position, update constraints
} else if state == .ended {
// Reset and prepare for new gesture
}
}
一切似乎都运行良好,但是当设备旋转到新的方向(没有抬起手指)时,手势识别器停止接收活动触摸的更新,但永远不会触发 handlePanGesture()
.ended
状态集。
现在我正在处理这个问题,方法是寻找 viewWillTransition(to:with:)
并在发生这种情况时清理状态,但是这种方法会失败,例如 iPad 从纵向向右旋转- 向上到纵向颠倒 - 从来没有任何尺寸过渡。有没有什么可以取消旋转时的手势识别器(并触发对 handlePanGesture()
的调用)?
您还需要检查 .cancelled
状态。
顺便说一句,打开状态而不是 if, else if, else if, else if