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:
 */

results matching ""

    No results matching ""