ios 侧滑返回传值卡死_iOS 侧滑返回的那点事

前言

对于iOS用户来说,右滑返回是一个比较常见的。那么对于一个开放者来说,怎么去实现?其中又有哪些坑呢?

目前的侧滑效果有两种:

1.边缘触发侧滑(苹果原生)

2.全屏触发侧滑

而实现目前有三种方式:

1.系统自带(不自定义导航)

2.使用系统动画去实现

3.自定义导航,默认开启系统的返回手势

参考文章:

iOS侧滑返回的三种实现方式

正文

至于两种侧滑效果孰好孰坏没有办法说,这就需要根据公司的产品需求去衡量。

对于全屏手势的最简便的实现方式就是定义一个全屏手势,其实现方式还是去取系统的左滑手势(@select(handleNavigationTransition:))实现。

重点坑

坑点一

Bug描述:当app集成了侧滑返回手势,在根目录侧滑手势,再任意点击push新的控制器,页面卡死。

解决过程:用view去分层查看会看到新控制器是push出来的。但页面上却没有。

解决方法:禁用根目录下的侧滑手势。

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer

{

if ( gestureRecognizer == self.interactivePopGestureRecognizer )

{

UIViewController *vc = self.viewControllers.lastObject;

// 禁用某些不支持侧滑返回的页面

if ([vc isKindOfClass:[OpenContainerDoorVC class]]) {

return NO;

}

// 禁用根目录的侧滑手势

if ( self.viewControllers.count < 2 || self.visibleViewController == [self.viewControllers objectAtIndex:0] )

{

return NO;

}

}

return YES;

}

坑点二

Bug描述:当从扫码页面跳到新页面时,侧滑返回就又回到扫码页面,但实际希望到扫码的上一个页面。

解决过程:我们知道navigation是有viewControllers这样一个压栈出栈的属性的。那么假如可以修改其中的控制器的顺序或者增删控制器,自然可以完美解决这个问题。

解决方法:

NSMutableArray *VCs = [NSMutableArray arrayWithArray: self.navigationController.viewControllers];

// 剔除想要移除的控制器

[VCs removeObject:self];

[self.navigationController setViewControllers:VCs];

坑点三

Bug描述:当当前页面最底层是scrollView时,侧滑手势失效问题。

解决思路:当在边缘时,禁用scrollView的滑动手势。

解决方法:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer

{

if ([otherGestureRecognizer isKindOfClass:[UIScreenEdgePanGestureRecognizer class]]) {

if (gestureRecognizer.state != UIGestureRecognizerStatePossible) {

return YES;

}

}

return NO;

}

后记

每天进步一点点!!!加油!!!

你可能感兴趣的:(ios,侧滑返回传值卡死)