最近看到一个哥们,在简信发了一个处理自定义返回键的文章。
那篇文章的用法我以前我就用过了,但是有个很严重的bug,就是会卡界面,虽然这个bug不太好触发。
以前我以为只要苹果提供的改一些值是没问题的,但是我错了,太小看苹果内部封装的处理了。
在UINavigationController
里面有个手势。
//UINavigationController.h
@property(nullable, nonatomic, readonly) UIGestureRecognizer *interactivePopGestureRecognizer NS_AVAILABLE_IOS(7_0);
在网上有很多帖子都在写只有将这个手势的delegate
重新赋值,就会有在pop
的返回手势。
self.interactivePopGestureRecognizer.delegate = self;
这个确实是有这个返回手势效果,但是会延伸出一个bug,就是之前说的卡界面。
那么如何解决。
其实解决思路有很多,我之前写的,就是添加个手势在UINavigationController
的view
中自己处理。
但是耦合性太强,最主要太挫了,不符合我的理念。
所以在网上找了两个不错的第三方,分别是MLTransition 和 FDFullscreenPopGesture 。
这两种返回有啥区别呢?
MLTransition
这一个返回效果是跟iOS7以上原生自带的返回效果是一样的,并且处理了对scrollView
的冲突。
目前我在写的app也在使用它。
他的实现方式是全局的,只需要一句话,非常简单,还有两种手势任你挑选。
//WJAppDelegate.m
@implementation WJAppDelegate
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//nav 手势处理 , MLTransitionGestureRecognizerTypeScreenEdgePan,MLTransitionGestureRecognizerTypePan
[MLTransition validatePanPackWithMLTransitionGestureRecognizerType:MLTransitionGestureRecognizerTypeScreenEdgePan];
return YES;
}
...
@end
FDFullscreenPopGesture
这个是百度的大神写的返回手势。
目前多个百度app都在使用(百度知道,百度贴吧等),还有一些其他APP也在使用这个。
具体返回效果很炫酷,丝滑流畅。
非常感谢这个作者提供开源。
具体用法我不说了,会在参考
上贴上此作者的博客链接。
参考:
molon :https://github.com/molon/MLTransition
@我就叫Sunny怎么了 :http://blog.sunnyxx.com/2015/06/07/fullscreen-pop-gesture/
总结:
返回手势这一块,应该有很多人纠结,我也纠结过。
以上提供两种方法,看具体需求使用。
ps:此文章以上两个第三方作者觉得我侵权可以在新浪微博私信我。@千年一之后
网友评论
其实我的库从去年一月份写好之后自己的app并没有用上。
因为中间拖返实际上对我来说不是太有必要,反而可能影响到一些其他交互。
而边界拖返的话,使用appearance全局修改返回图标的方式直接就得到了解决,无需设置leftNavigationItem就可以。
在下不善写文,有兴趣的话可以尝试我新开源库MLInputDodger。
另外,我的所有库全部放心无偿任意用,不必客气。
我也不善于写文章,我只是把经历过的问题,写出来而已。