一,目前基本上所有的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];
}
如有帮助,请支持gitdemo
简单展示一下目录划分,方便大家查阅