如何給螢幕新增pop全屏手勢
阿新 • • 發佈:2018-12-25
一,目前基本上所有的APP在push到一個介面,可以利用手勢滑動介面返回到上一級介面,這就是所謂的pop手勢(系統自己預設的是,只能在邊緣滑動的時候才能返回),廢話不多說直接開始程式碼
1,基於UINavigationController建立自己的導航
2,匯入標頭檔案#import “objc/runtime.h”
這裡就需要說一點執行時了,他是比較厲害的,也是比較高逼格的,所以咋們或多或少要知道這個東西。具體的用法大家可以自行百度,很多的教程,下面主要是針對怎麼取出UIGestureRecognizer這裡面的屬性的方法;
- (void)viewDidLoad {
[super viewDidLoad];
[self setupNavigationBar];
}
// 設定全屏手勢
- (void)setupPopGesture {
// 1, 獲取系統的pop手勢
UIGestureRecognizer *systemGesture = self.interactivePopGestureRecognizer;
// 2, 獲取pop手勢上的view
UIView *gestureView = systemGesture.view;
// 3, 獲取target、action
// 3.1, 利用雲執行時
unsigned int count = 0;
Ivar *ivars = class_copyIvarList([UIGestureRecognizer class], &count);
for (int i = 0; i < count; i++) {
NSString *typeStr = [NSString stringWithUTF8String:ivar_getTypeEncoding(ivars[i])];
NSString *nameStr = [NSString stringWithUTF8String:ivar_getName(ivars[i])];
NSLog (@"type == %@",typeStr);
NSLog(@"name == %@",nameStr);
}
// 3.2, 列印_targets,利用kvc修改value
NSArray *targets = [systemGesture valueForKey:@"_targets"];
for (int i = 0; i < targets.count; i++) {
NSLog(@"_targets == %@",targets[i]);
// _targets == (action=handleNavigationTransition:, target=<_UINavigationInteractiveTransition 0x7fd116c28c90>)
}
id targetObjc = targets.firstObject;
NSLog(@"targetObjc == %@",targetObjc);
// 3.3, 取出target
id target = [targetObjc valueForKey:@"target"];
// 3.4, 取出action
SEL action = NSSelectorFromString(@"handleNavigationTransition:");
// 4, 建立自己的pan手勢
UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc]init];
[gestureView addGestureRecognizer:panGesture];
[panGesture addTarget:target action:action];
}
簡單展示一下目錄劃分,方便大家查閱