iOS 完美的自定義側滑返回,不會與頁面其他手勢沖突

之前在網上找的側滑全屏側滑返回,發現會與頁面其他手勢沖突,自己做了一下修改,發現還是挺好用的,分享給大家。

這是自定義的NavigationController

demo在這里

#import "Navigation.h"

@interface Navigation ()

@property (nonatomic,strong)UIPanGestureRecognizer *pan;

@property (nonatomic,strong)UIScreenEdgePanGestureRecognizer *screenEdgeGesOut;

@end

@implementation Navigation

+(void)initialize{

? ? //要用appearance初始化

? ? UINavigationBar *bar = [UINavigationBar appearance];

//? ? [bar setBarStyle:UIBarStyleBlack];

//? ? [bar setBackgroundColor:[UIColor whiteColor]];

//? ? [bar setBackgroundImage:[UIImage imageNamed:@"背景"] forBarMetrics:UIBarMetricsDefault];

? ? [barsetBarTintColor:[UIColor whiteColor]];//UIColorFromRGB(0xff386b)

? ? bar.translucent=NO;

? ? NSMutableDictionary *dic = [NSMutableDictionary dictionary];

? ? dic[NSForegroundColorAttributeName] = [UIColor colorWithRed:62/255.f green:62/255.f blue:62/255.f alpha:1];//[UIColor whiteColor]


? ? dic[NSFontAttributeName] = [UIFont systemFontOfSize:15 weight:0.3];// [UIFont fontWithName:@"HiraKakuProN-W6" size:15];

? ? [barsetTitleTextAttributes:dic];


? ? bar.barStyle = UIBarStyleDefault;// UIBarStyleBlack





//? ? //設置item屬性

//? ? UIBarButtonItem *item = [UIBarButtonItem appearance];

//? ? NSMutableDictionary *itemArrays = [NSMutableDictionary dictionary];

//? ? itemArrays[NSFontAttributeName] = [UIFont systemFontOfSize:16];

//? ? itemArrays[NSForegroundColorAttributeName] = UIColorFromRGB(0x323232);

//? ? [item setTitleTextAttributes:itemArrays forState:UIControlStateNormal];

//? ?

//? ? NSMutableDictionary *itemDisAttrys = [NSMutableDictionary dictionary];

//? ? itemDisAttrys[NSForegroundColorAttributeName] = [UIColor whiteColor];

//? ? [item setTitleTextAttributes:itemDisAttrys forState:UIControlStateDisabled];

}

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

{


? ? return (self.topViewController !=[self.viewControllers firstObject]);

}

//? 防止導航控制器只有一個rootViewcontroller時觸發手勢

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer*)gestureRecognizer {



? ? //解決與左滑手勢沖突


? ? NSLog(@"%lu,%@",(unsigned long)self.childViewControllers.count,gestureRecognizer.view);

//如果哪個控制器不需要策劃返回,就可以返回NO

//? ? if ([self.topViewController isKindOfClass:[CustomerServiceController class]]){

//? ? ? ? return NO;

//? ? }else if ([self.topViewController isKindOfClass:[ChatViewController class]]){

//? ? ? ? return NO;

//? ? }else if ([self.topViewController isKindOfClass:[WJLoginSelectViewController class]]){

//? ? ? ? return NO;

//? ? }


? ? return self.childViewControllers.count == 1 ? NO : YES;

}



- (void)viewDidLoad {


? ? [super viewDidLoad];

? ? id target = self.interactivePopGestureRecognizer.delegate;

? ? SEL handler = NSSelectorFromString(@"handleNavigationTransition:");


? ? self.screenEdgeGesOut = [[UIScreenEdgePanGestureRecognizer alloc]initWithTarget:target action:handler];

? ? self.screenEdgeGesOut.edges = UIRectEdgeLeft;

? ? self.screenEdgeGesOut.delegate = self;

? ? UIView *targetView = self.interactivePopGestureRecognizer.view;

? ? [targetViewaddGestureRecognizer:self.screenEdgeGesOut];


? ? // 關閉邊緣觸發手勢 防止和原有邊緣手勢沖突

? ? [self.interactivePopGestureRecognizer setEnabled:NO];


}

- (void)pushViewController:(UIViewController*)viewController animated:(BOOL)animated

{

? ? if (self.childViewControllers.count !=0) {

? ? ? ? //設置返回按鈕

? ? ? ? UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];


? ? ? ? [buttonaddTarget:self action:@selector(back) forControlEvents:UIControlEventTouchUpInside];

? ? ? ? //尺寸自適應

? ? ? ? button.frame=CGRectMake(0,0,12,18);


? ? ? ? // 讓按鈕內部的所有內容左對齊

? ? ? ? button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;

? ? ? ? //設置文字顏色

? ? ? ? [buttonsetTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];

? ? ? ? [buttonsetTitleColor:[UIColor whiteColor] forState:UIControlStateHighlighted];

? ? ? ? button.titleLabel.font = [UIFont systemFontOfSize:18];

//? ? ? ? //設置箭頭圖片

//? ? ? ? [button setImage:[UIImage imageNamed:@"back"]forState:UIControlStateNormal];

//? ? ? ? [button setImage:[UIImage imageNamed:@"back"] forState:UIControlStateHighlighted];

? ? ? ? //尺寸自適應

//? ? ? ? button.JY_size= CGSizeMake(kWidth(10), kHeight(17));


? ? ? ? //設置箭頭圖片

? ? ? ? [buttonsetImage:[UIImage imageNamed:@"back"]forState:UIControlStateNormal];

? ? ? ? [buttonsetImage:[UIImage imageNamed:@"back"] forState:UIControlStateHighlighted];

? ? ? ? viewController.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:button];


? ? ? ? // 隱藏tabbar

? ? ? ? viewController.hidesBottomBarWhenPushed=YES;

? ? }

? ? //放在后面,可以覆蓋上面設置的leftBarButtonItem

? ? [superpushViewController:viewControlleranimated:animated];


}

//返回上一頁

- (void)back

{


? ? [self popViewControllerAnimated:YES];

}

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,431評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,637評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 178,555評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,900評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,629評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,976評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,976評論 3 448
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,139評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,686評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,411評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,641評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,129評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,820評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,233評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,567評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,362評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,604評論 2 380

推薦閱讀更多精彩內容