gesture manage
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
// 防止手势冲突
self.interactivePopGestureRecognizer.enabled = NO;
// 取出系统手势的target对象,
// 取出某个对象里面属性 1.KVC 前提条件:必须知道属性名 2.运行时
// 遍历某个类里面所有属性 Ivar:表示成员属性
// copyIvarList只能获取哪个类下面的属性,并不会越界(不会把它的父类的属性给遍历出来)
// Class 获取哪个类的成员属性
// count:告诉你当前类里面成员属性的总数
// unsigned int count = 0;
// // 返回成员属性的数组
// Ivar *ivars = class_copyIvarList([UIGestureRecognizer class], &count);
//
// for (int i = 0; i < count; i++) {
// // 取出成员变量
// Ivar ivar = ivars[i];
//
// // 获取属性名
// NSString *ivarName = @(ivar_getName(ivar));
//
// NSLog(@"%@",ivarName);
//
//
// }
// _targets:属性名 value
NSArray *targets = [self.interactivePopGestureRecognizer valueForKeyPath:@"_targets"];
id objc = [targets firstObject];
id target = [objc valueForKeyPath:@"_target"];
// NSLog(@"%@",self.interactivePopGestureRecognizer.delegate);
UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self.interactivePopGestureRecognizer.delegate action:@selector(handleNavigationTransition:)];
pan.delegate = self;
[self.view addGestureRecognizer:pan];
// 系统也有滑动手势,系统也是使用Target实现了滑动功能(action),
// self.interactivePopGestureRecognizer 滑动的手势
}
#pragma mark - 手势代理方法
// 是否开始触发手势
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
// 判断下当前控制器是否是跟控制器
return (self.topViewController != [self.viewControllers firstObject]);
}
/*
<UIScreenEdgePanGestureRecognizer: 0x7f9c22148dd0; state = Possible; delaysTouchesBegan = YES; view = <UILayoutContainerView 0x7f9c2213db80>; target= <(action=handleNavigationTransition:, target=<_UINavigationInteractiveTransition 0x7f9c22148850>)>>
系统滑动手势类型:UIScreenEdgePanGestureRecognizer
target:_UINavigationInteractiveTransition
action:handleNavigationTransition:
*/