1

这是意料之中的,但我似乎无法找到一个正常工作的运行时,因为它之前似乎是一个私有 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];


    }
4

3 回答 3

3

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

NSString *currentSystemVersion = [[UIDevice currentDevice] systemVersion];
if([currentSystemVersion compare:@"3.2"] == NSOrderedAscending) {
    //add gesture recognizer
} else {
    // :(
}
于 2010-11-10T09:07:43.113 回答
3

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

于 2010-11-10T07:28:29.107 回答
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

解释:

要确定某个类在给定的 iOS 版本中是否在运行时可用,您通常检查该类是否为 nil。不幸的是,这个测试对于 UIGestureRecognizer 来说并不完全准确。虽然这个类从 iOS 3.2 开始公开可用,但在此之前它还处于开发阶段。尽管该类存在于早期版本中,但该早期版本不支持使用它和其他手势识别器类。您不应尝试使用这些类的实例。

在这里查看全文。

于 2012-11-05T14:44:05.390 回答