UIGestureRecognizer崩溃< OS3.2

时间:2010-11-10 07:18:13

标签: iphone ios uigesturerecognizer gestures ios-3.x

这是可以预料到的,但我似乎无法找到一个正常运行的运行时,因为它似乎是以前的私有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 个答案:

答案 0 :(得分:3)

iOS 3.2之前不支持UIGestureRecognizer。即使方法addGestureRecognizer:存在,也不意味着使用它是安全的。

答案 1 :(得分:3)

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

NSString *currentSystemVersion = [[UIDevice currentDevice] systemVersion];
if([currentSystemVersion compare:@"3.2"] == NSOrderedAscending) {
    //add gesture recognizer
} else {
    // :(
}

答案 2 :(得分:0)

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

Apple的医生说:

  

在运行时确定是否可以使用手势识别器   你的应用程序,测试该类是否存在,如果存在,   分配一个实例并查看它是否响应选择器   locationInView :.在iOS 3.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

Explenation:

  

确定某个类在给定iOS中是否在运行时可用   发布时,您通常会检查该类是否为零。不幸,   对于UIGestureRecognizer,此测试不是非常准确。虽然   这个类是从iOS 3.2开始公开的,它是在   在此之前的短时间内发展。虽然这个类存在于   早期版本,使用它和其他手势识别器类   早期版本不支持。你不应该试图使用   这些类的实例。

查看全文here