Ios 当滑动到pop viewController时,如何识别InteractivePopgestureRecognitor是否成功进行?

Ios 当滑动到pop viewController时,如何识别InteractivePopgestureRecognitor是否成功进行?,ios,objective-c,iphone,swift,uigesturerecognizer,Ios,Objective C,Iphone,Swift,Uigesturerecognizer,我想在用户将页面滑动到弹出viewController时清理一些属性,只需使其工作方式与点击后退按钮相同 我尝试了以下代码,但失败了,因为不是每次刷卡都成功。由于手势被取消,某些滑动到弹出框的操作可能会失败 而且我在UIgestureRecognitizer中找不到足够好的委托(找到类似于touchesend)。我也不能使用目标操作,因为调用操作的次数太多 func viewWillAppear(_ animated: Bool) { self.navigationController.

我想在用户将页面滑动到弹出viewController时清理一些属性,只需使其工作方式与点击后退按钮相同

我尝试了以下代码,但失败了,因为不是每次刷卡都成功。由于手势被取消,某些滑动到弹出框的操作可能会失败

而且我在UIgestureRecognitizer中找不到足够好的委托(找到类似于
touchesend
)。我也不能使用目标操作,因为调用操作的次数太多

func viewWillAppear(_ animated: Bool) {
    self.navigationController.interactivePopGestureRecognizer.delegate = self
}
func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
   viewModel.goBackPage(isSwipeBack: true)
   return true
}

如何在正确的时候解决滑动到弹出视图控制器时按下的触发器
backbutton

天哪,借助@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, .began, .changed:
        isSwipePop = true
    default:
        isSwipePop = false
    }
    return true
}

我发现即使刷卡不成功,也会调用
视图将消失。所以我改成这样:

override func viewDidDisappear(_ animated: Bool) {
    super.viewDidDisappear(animated)

    print("viewDidDisappear \(self)")
    if isSwipePop && isMovingFromParentViewController {
        viewModel.goBackPage(withPopViewController: true)
    }

    isSwipePop = false
}

有关更多信息,请参见从第二页滑动到第一页的场景

从第二页轻扫到第一页,在轻扫到第一页的中途释放,它会返回到第二页:

视图将消失第二页
视图将显示在第一页
视图将从第一页消失
查看第一页
视图将出现在第二页
查看第二页

成功地从第二页滑动到第一页:

视图将消失第二页
视图将显示在第一页
查看第二页

VIEWDID出现在第一页

为什么不使用
VIEWDID消失
?因为按下下一个viewController也会触发VIEWDID消失。但是你给我一个主意,也许我可以使用手势识别器的状态设置一个标志
IssweepBeging
,以确定我是否在ViewDidEnglish中刷回。很高兴提供帮助:)如果self.isBeingDisembled | | self.isMovingFromParentViewController{},你也可以使用
确定前进还是后退。您还可以组合具有相同结果的案例,如
案例。可能、.start、.changed:
,您也不需要在swift switch中使用
break
。每个案例都会自动断开开关。嗨@Sam\M,我更新了下面的答案,也许你感兴趣:)