代码之家  ›  专栏  ›  技术社区  ›  Lee Armstrong

uigesturerecognizer crasks on<os3.2

  •  1
  • Lee Armstrong  · 技术社区  · 15 年前

    这是意料之中的,但我似乎找不到一个运行时能正常工作,因为它以前似乎是一个私有API!!!!!

    目前,我已经和OS3.1.3响应的是addgestureRecognizer选择器!!!!!

    if ( [self.view respondsToSelector:@selector(addGestureRecognizer:)] ) {
    
            UIGestureRecognizer *recognizer;
            recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(morePress)];
            [self.view addGestureRecognizer:recognizer];
            recognizer.delegate = self;
            [recognizer release];
    
    
        }
    
    3 回复  |  直到 15 年前
        1
  •  3
  •   manicaesar    15 年前

    您应该明确检查系统版本:

    NSString *currentSystemVersion = [[UIDevice currentDevice] systemVersion];
    if([currentSystemVersion compare:@"3.2"] == NSOrderedAscending) {
        //add gesture recognizer
    } else {
        // :(
    }
    
        2
  •  3
  •   Lily Ballard    15 年前

    addGestureRecognizer:

        3
  •  0
  •   Tieme    13 年前

    它确实是一个私有API,在3.2之前的版本中不受支持。

    苹果的医生说:

    在运行时确定是否可以在 分配一个实例并查看它是否响应选择器 位置视图:。直到IOS3.2才将此方法添加到类中。

    样例代码:

    UIGestureRecognizer *gestureRecognizer = [[UIGestureRecognizer alloc] initWithTarget:self action:@selector(myAction:)];
    
    if (![gestureRecognizer respondsToSelector:@selector(locationInView:)]) {
        [gestureRecognizer release];
        gestureRecognizer = nil;
    }
    // do something else if gestureRecognizer is nil
    

    阐述:

    确定类在给定的IOS中是否在运行时可用 释放,通常检查类是否为零。不幸的是, 这项测试对UigestureRecognizer来说不完全准确。虽然 早期版本中,它和其他手势识别器类的使用是 这些类的实例。

    查看全文 here .

    推荐文章