如何识别interactivePopGestureRecognizer成功进行刷卡时弹出viewController?
我想清理一些属性时,用户滑动页面弹出viewController,只是使其工作原理与点击返回按钮相同。如何识别interactivePopGestureRecognizer成功进行刷卡时弹出viewController?
我尝试下面的代码,但它失败了,因为不是每次刷卡都是成功的。由于手势被取消,因此一些挥手弹出可能会失败。
我在UIGestureRecognizer中找不到足够好的代表(找到类似touchesEnded
的东西)。我也不能使用目标动作,因为动作会被调用太多次。
func viewWillAppear(_ animated: Bool) {
self.navigationController.interactivePopGestureRecognizer.delegate = self
}
func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
viewModel.goBackPage(isSwipeBack: true)
return true
}
我该如何解决触发器backButtonPressed
在刷卡时弹出viewController在正确的时刻?
哦,我的上帝,在@Sam_M的帮助下(https://stackoverflow.com/users/6739471/sam-m)的评论,我解决了它!
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
if isSwipePop {
viewModel.goBackPage(withPopViewController: true)
}
}
func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
switch gestureRecognizer.state {
case .possible:
isSwipePop = true
break
case .began:
isSwipePop = true
break
case .changed:
isSwipePop = true
break
default:
isSwipePop = false
break
}
return true
}
很高兴帮助:)您也可以使用'if self.isBeingDismissed || self.isMovingFromParentViewController {0}确定您是前进还是后退。 –
你也可以结合你的例子,例如'case.possible,.began,.changed:',你也不需要在快速切换中使用'break'。每种情况都会自动中断交换机。 –
嗨@Sam_M,我更新了一个答案beloew,也许你感兴趣:) – allenlinli
我发现viewWillDisappear
即使刷卡不成功也会被调用。所以我改成了这样:
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
print("viewDidDisappear \(self)")
if isSwipePop && isMovingFromParentViewController {
viewModel.goBackPage(withPopViewController: true)
}
isSwipePop = false
}
欲了解更多信息,这是从两个页面滑动到一个页面的场景。
刷卡到一个页面从两个页面,发布在半路上刷卡一页,它弹回两页:
viewWillDisappear第二页
viewWillAppear中第一个
viewWillDisappear壹
viewDidDisappear壹
viewWillAppear中第二页
viewDidAppear第二页
从成功两页的滑动即可一页:
viewWillDisappear第二页
viewWillAppear中第一个
viewDidDisappear第二页
viewDidAppear壹
你为什么不使用'viewDidDisappear'? –
因为推到下一个viewController也会触发viewDidDisappear。 但你给了我一个想法,也许我可以使用gestureRecognizer的状态来设置一个标志'isSwipeBegan'来决定我是否在viewDidDisappear中滑回。 – allenlinli