現(xiàn)在許多App都有滑動手勢讓頁面返回的效果签夭,在這里先上兩個效果圖:
效果一的實現(xiàn)
要實現(xiàn)效果一,只需要幾行代碼
首先,找到視圖控制器的導(dǎo)航欄控制器UINavigationController
然后,在該類中添加手勢的協(xié)議顺又,如下:
#import "baseNavigation.h"
@interface baseNavigation ()<UIGestureRecognizerDelegate>
@end
接下來在viewDidLoad中添加如下代碼:
- (void)viewDidLoad {
[super viewDidLoad];
// 獲取系統(tǒng)自帶滑動手勢的target對象
id target = self.interactivePopGestureRecognizer.delegate;
// 創(chuàng)建滑動手勢,并調(diào)用系統(tǒng)自帶的滑動手勢target的方法
UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc]initWithTarget:target action:@selector(handleNavigationTransition:)];
// 設(shè)置手勢代理
pan.delegate = self;
// 添加滑動手勢
[self.view addGestureRecognizer:pan];
// 禁止使用系統(tǒng)自帶的滑動手勢
self.interactivePopGestureRecognizer.enabled = NO;
}
最后等孵,調(diào)用協(xié)議里的gestureRecognizerShouldBegin判斷一下稚照,如下:
//這個方法是判斷手勢是否應(yīng)該觸發(fā)
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
// 只有非根控制器才開滑動返回,所以再這里判斷一下是否為根控制器
if (self.childViewControllers.count == 1) {
return NO;
}
return YES;
此時俯萌,會發(fā)現(xiàn)創(chuàng)建手勢滑動時所調(diào)用的方法會出現(xiàn)警告果录,可以用如下方法消除:
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wundeclared-selector"
UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc]initWithTarget:target action:@selector(handleNavigationTransition:)];
#pragma clang diagnostic pop
完成如上步驟后,就可以實現(xiàn)效果一的效果
效果二的實現(xiàn)
效果二是基于效果一實現(xiàn)的绳瘟,如需要效果二的效果雕憔,請先完成效果一
要完成效果二,很簡單糖声,只需要在視圖控制器中將這個視圖控制器的UINavigationBar隱藏斤彼,然后自定義一個一模一樣的NavigationBar即可(Tips:自定義的UIView的高度為64,狀態(tài)欄的高度為24)
效果二中的兩個頁面的UINavigationBar都是隱藏掉的蘸泻,頁面二中的UINavigationBar是小編自定義的視圖
下面是可以了解一下的部分
如果上面的兩種效果達不到需求琉苇,可以去了解一下小編在GitHub上看到的這個第三方庫,附上GitHub地址:https://github.com/forkingdog/FDFullscreenPopGesture
可以用cocoapods安裝:
pod 'FDFullscreenPopGesture', '~> 1.1'
最后悦施,希望這篇文章對各位看官們有所幫助并扇。