Apple 自 iOS7 之后增加了屏幕邊緣右劃返回上一級的交互枯芬,pop 到上一級頁面的操作變的非常順暢清蚀,從此赚瘦,幾乎很少的用戶再使用返回按鈕的方式返回了,現(xiàn)在的App中寺谤,如果沒有實(shí)現(xiàn)側(cè)滑返回的功能仑鸥,對用戶來說是極不方便的。
Apple自帶的側(cè)滑返回效果僅限于屏幕邊緣左側(cè)变屁,以下就提供一種全屏幕側(cè)滑返回的方案眼俊,使用極少的代碼量來達(dá)到和系統(tǒng)相同的效果。
此段代碼可加在父控制器內(nèi)
id target = self.navigationController.interactivePopGestureRecognizer.delegate;
// 創(chuàng)建全屏滑動手勢粟关,調(diào)用系統(tǒng)自帶滑動手勢的target的action方法
UIPanGestureRecognizer *backPan = [[UIPanGestureRecognizer alloc] initWithTarget:target action:@selector(handleNavigationTransition:)]; //若實(shí)現(xiàn)疮胖,會奔潰
// 設(shè)置手勢代理,攔截手勢觸發(fā)
backPan.delegate = self;
// 給控制器的view添加全屏滑動手勢
[self.view addGestureRecognizer: backPan];
// 將系統(tǒng)自帶的滑動手勢禁用
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
通過此代理控制是否需要返回手勢
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
// 只有非根控制器才有滑動返回功能,根控制器沒有澎灸。
// 判斷導(dǎo)航控制器是否只有一個子控制器院塞,如果只有一個子控制器,肯定是根控制器
if (self.navigationController.viewControllers.count == 1) {
// 表示用戶在根控制器界面性昭,就不需要觸發(fā)滑動手勢拦止,
return NO;
}
return YES;
}