屏幕旋转后 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