2010-11-10 99 views
1

这是可以预料的,但我似乎无法找到一个运行正常工作,因为它似乎是一个私人API之前!UIGestureRecognizer崩溃在<OS3.2

目前,我已经和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

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

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

UIGestureRecognizer在iOS 3.2之前不受支持。即使方法addGestureRecognizer:存在,这并不意味着它可以安全使用。

0

这确实是一个私有API而不是在之前的版本3.2的支持。

苹果的医生说:

要在运行时确定是否可以在 应用程序中使用手势识别,测试是否类存在,如果是这样, 分配一个实例,看看检查它是否响应到选择器 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