iOS开发常见问题轩轩ios学习iOS学习笔记

导航控制器左滑返回(下)

2016-03-09  本文已影响104人  咬鹃
interactivePopGestureRecognizer.png
// _UINavigationInteractiveTransition原来是通过这个target 调用了handleNavigationTransition这个action
@property (readwrite, nonatomic, assign) UIRectEdge edges; //< The edges on which this gesture recognizes, relative to the current interface orientation

// 这个枚举的具体属性是
typedef NS_OPTIONS(NSUInteger, UIRectEdge) {
    UIRectEdgeNone   = 0,
    UIRectEdgeTop    = 1 << 0,
    UIRectEdgeLeft   = 1 << 1,
    UIRectEdgeBottom = 1 << 2,
    UIRectEdgeRight  = 1 << 3,
    UIRectEdgeAll    = UIRectEdgeTop | UIRectEdgeLeft | UIRectEdgeBottom | UIRectEdgeRight
} NS_ENUM_AVAILABLE_IOS(7_0);

// 这个时候我们来打印系统的这个值
2016-03-08 22:25:55.130 57 - 彩票竞技场[18827:319119] edges ==== 2
- (void)viewDidLoad
{
    self.delegate = self;

    // 保存手势代理
    self.gestureDelegate = self.interactivePopGestureRecognizer.delegate;

    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);
    }
}
打印结果.png
    id objc = [self.interactivePopGestureRecognizer valueForKeyPath:@"_targets"];
    NSLog(@"%@",objc);
    NSArray *targets = [self.interactivePopGestureRecognizer valueForKeyPath:@"_targets"];
    id target = [targets firstObject];
    id objc = [target valueForKeyPath:@"_target"];
    NSLog(@"%@",objc);
    // 取消原有手势防治冲突
    self.interactivePopGestureRecognizer.enabled = NO;

    NSArray *targets = [self.interactivePopGestureRecognizer valueForKeyPath:@"_targets"];
    id target = [targets firstObject];
    id objc = [target valueForKeyPath:@"_target"];

    UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:objc action:@selector(handleNavigationTransition:)];

    [self.view addGestureRecognizer:pan];
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
    // 如果当前控制器不是根控制器才让手势可用
    return self.topViewController != self.childViewControllers[0];
}
    NSLog(@"%@",self.interactivePopGestureRecognizer.delegate);
上一篇 下一篇

猜你喜欢

热点阅读