一、 在QMUINavigationController.m文件中
// 接管系统手势返回的回调的方法中
- (void)handleInteractivePopGestureRecognizer:(UIScreenEdgePanGestureRecognizer *)gestureRecognizer
在此方法中的下面代码加入对是否还存在动画的判断 self.isViewControllerTransiting = NO; 不然,当你三个控制器,vc1 push 到vc2 , vc2 push 到vc3 的场景。在vc1 push 到 vc2, vc2想手势pop返回,但操作到一半,不返回了,取消手势的时候,不会将 self.isViewControllerTransiting = NO ,导致判断是否还存在过场动画还是YES,会拦截 vc2 push 到vc3。
if (state == UIGestureRecognizerStateEnded) {
if (CGRectGetMinX(self.topViewController.view.superview.frame) < 0) {
// by molice:只是碰巧发现如果是手势返回取消时,不管在哪个位置取消,self.topViewController.view.superview.frame.orgin.x必定是-124,所以用这个<0的条件来判断
QMUILog(NSStringFromClass(self.class), @"手势返回放弃了");
viewControllerWillDisappear = self.topViewController;
viewControllerWillAppear = self.viewControllerPopping;
self.isViewControllerTransiting = NO; // 加的就是这行
} else {
QMUILog(NSStringFromClass(self.class), @"执行手势返回");
}
}
网友评论