iOS 導(dǎo)航欄自帶頁(yè)面右滑pop使用示例
iOS7之后蘋(píng)果導(dǎo)航控制器增加了一個(gè)左側(cè)邊緣右滑pop的手勢(shì),在非棧底的控制器里面,從左邊右滑之后相當(dāng)于出棧(pop)樣子。
以下設(shè)置均在自定義的UINavigationController里操作
// 默認(rèn)是YES 設(shè)置為NO左側(cè)右滑手勢(shì)就不可用了 self.interactivePopGestureRecognizer.enabled = YES;
也可以通過(guò)手勢(shì)實(shí)現(xiàn)右滑
遵守UIGestureRecognizerDelegate協(xié)議,設(shè)置代理對(duì)象,實(shí)現(xiàn)一下代理方法即可:
-(void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
self.navigationController.interactivePopGestureRecognizer.delegate = self;
}
#pragma mark - UIGestureRecognizerDelegate
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
if (self.viewControllers.count <= 1) {
return NO;
}
return YES;
}
個(gè)人的記憶方法:
backBarButtonItem設(shè)置下一個(gè)頁(yè)面的返回按鈕
leftBarButtonItem設(shè)置當(dāng)前頁(yè)面的返回按鈕
項(xiàng)目中我們多數(shù)會(huì)自定義左側(cè)返回按鈕leftBarButtonItem,這個(gè)時(shí)候就算設(shè)置self.interactivePopGestureRecognizer.enabled = YES了或者實(shí)現(xiàn)手勢(shì)的代理,左邊緣的右滑動(dòng)手勢(shì)依舊會(huì)失效,例如如下代碼寫(xiě)過(guò)之后,可以驗(yàn)證一下,失效了。
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
{
if (self.viewControllers.count > 0) {
/* 不是棧底控制器的時(shí)候隱藏tabbar */
viewController.hidesBottomBarWhenPushed = YES;
// 設(shè)置左邊的返回按鈕leftBarButtonItem
UIButton *backBtn = [UIButton buttonWithType:UIButtonTypeCustom];
backBtn.frame = CGRectMake(0, 0, 44, 44);
backBtn.imageView.contentMode = UIViewContentModeCenter;
backBtn.contentEdgeInsets = UIEdgeInsetsMake(0, 0, 0, 34);
[backBtn setImage:[UIImage imageNamed:@"rrrr"] forState:UIControlStateNormal];
[backBtn setImage:[UIImage imageNamed:@"rrrr"] forState:UIControlStateHighlighted];
[backBtn addTarget: self action: @selector(back) forControlEvents: UIControlEventTouchUpInside];
UIBarButtonItem *backBtnItem=[[UIBarButtonItem alloc]initWithCustomView:backBtn];
viewController.navigationItem.leftBarButtonItem = backBtnItem;
// 此處改為設(shè)置backBarButtonItem 右滑手勢(shì)可以用,但自定義按鈕不展示??!
}
[super pushViewController:viewController animated:animated];
}
按照如下方式設(shè)置backBarButtonItem或leftBarButtonItem,其他不做任何設(shè)置,右滑效果可用:
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
{
if (self.viewControllers.count > 0) {
/* 不是棧底控制器的時(shí)候隱藏tabbar */
viewController.hidesBottomBarWhenPushed = YES;
}
[self.navigationBar setBackIndicatorImage:[UIImage imageNamed:@"rrrr"]];
[self.navigationBar setBackIndicatorTransitionMaskImage:[UIImage imageNamed:@"rrrr"]];
UIBarButtonItem *backItem = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil];
self.navigationItem.backBarButtonItem = backItem;
[super pushViewController:viewController animated:animated];
}
或者
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
{
if (self.viewControllers.count > 0) {
/* 不是棧底控制器的時(shí)候隱藏tabbar */
viewController.hidesBottomBarWhenPushed = YES;
[self.navigationBar setBackIndicatorImage:[UIImage imageNamed:@"rrrr"]];
[self.navigationBar setBackIndicatorTransitionMaskImage:[UIImage imageNamed:@"rrrr"]];
UIBarButtonItem *backItem = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil];
self.navigationItem.leftBarButtonItem = backItem;
}
[super pushViewController:viewController animated:animated];
}
進(jìn)過(guò)上面的反復(fù)測(cè)試:在自定義導(dǎo)航欄控制器中backBarButtonItem不能用View視圖方法自定義,而leftBarButtonItem可以。
setBackIndicatorImage和setBackIndicatorTransitionMaskImage無(wú)論怎么設(shè)置都是只能看到setBackIndicatorImage的圖片,找不到原因?。?!
然后嘗試直接在root視圖控制器里面設(shè)置返回按鈕backBarButtonItem的自定義view,右滑手勢(shì)可用,但是設(shè)置leftBarButtonItem就不能使用右滑手勢(shì):
- (void)viewDidLoad {
[super viewDidLoad];
// 設(shè)置左邊的返回按鈕
UIButton *backBtn = [UIButton buttonWithType:UIButtonTypeCustom];
backBtn.frame = CGRectMake(0, 0, 44, 44);
backBtn.imageView.contentMode = UIViewContentModeCenter;
backBtn.contentEdgeInsets = UIEdgeInsetsMake(0, 0, 0, 34);
[backBtn setImage:[UIImage imageNamed:@"rrrr"] forState:UIControlStateNormal];
[backBtn setImage:[UIImage imageNamed:@"rrrr"] forState:UIControlStateHighlighted];
[backBtn addTarget: self action: @selector(back) forControlEvents: UIControlEventTouchUpInside];
backBtn.backgroundColor = [UIColor redColor];
[self.navigationController.navigationBar setBackIndicatorImage:[UIImage imageNamed:@"rrrr"]];
[self.navigationController.navigationBar setBackIndicatorTransitionMaskImage:[UIImage imageNamed:@"rrrr"]];
UIBarButtonItem *backBtnItem=[[UIBarButtonItem alloc]initWithCustomView:backBtn];
backBtnItem.title = @"";
self.navigationItem.backBarButtonItem = backBtnItem;
}
以上是自己的驗(yàn)證,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
iOS基礎(chǔ)知識(shí)之@property 和 Ivar 的區(qū)別
這篇文章主要介紹了iOS基礎(chǔ)知識(shí)之@property 和 Ivar 的區(qū)別介紹,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-08-08
ios通過(guò)SDWebImage實(shí)現(xiàn)圖片加載時(shí)的漸變效果
本篇文章主要介紹了ios通過(guò)SDWebImage實(shí)現(xiàn)圖片加載時(shí)的漸變效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-04-04
iOS動(dòng)畫(huà)實(shí)現(xiàn)雨花與櫻花特效
小編今天為大家?guī)?lái)一場(chǎng)淅淅瀝瀝的夜空之雨和滿(mǎn)天飛舞的櫻花之戀,希望能在炎炎夏日為您帶來(lái)一絲清爽的涼意!學(xué)習(xí)iOS動(dòng)畫(huà)的小伙伴們可以參考學(xué)習(xí)。2016-08-08
IOS實(shí)現(xiàn)微信朋友圈相冊(cè)評(píng)論界面的翻轉(zhuǎn)過(guò)渡動(dòng)畫(huà)
現(xiàn)在很多人幾乎每天都離不開(kāi)微信,大家有沒(méi)有發(fā)現(xiàn)在點(diǎn)開(kāi)微信相冊(cè)的時(shí)候,想要在相冊(cè)圖片界面跳轉(zhuǎn)查看點(diǎn)贊和評(píng)論時(shí),微信會(huì)采用界面翻轉(zhuǎn)的過(guò)渡動(dòng)畫(huà)來(lái)跳轉(zhuǎn)到評(píng)論界面,點(diǎn)擊完成又會(huì)翻轉(zhuǎn)回到圖片界面,這不同于一般的導(dǎo)航界面滑動(dòng)動(dòng)畫(huà),于是學(xué)著做了一下,有需要一起看看。2016-08-08

