这是可以预料的,但是我似乎找不到一个运行时正常工作的,因为它似乎是私人的API !!!

目前,我和OS3.1.3响应AddgesturerEncognizer选择器!!!!

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];


    }
有帮助吗?

解决方案

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

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

其他提示

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

这确实是私人API,在3.2之前不支持版本。

苹果的文档说:

要在运行时确定您是否可以在应用程序中使用手势识别器,请测试该类是否存在,并且(如果确实如此)分配一个实例,并查看检查是否响应Selector 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。不幸的是,对于uigesturerocgognizer而言,该测试并非完全准确。尽管该课程从iOS 3.2开始,但在此之前的短时间内就在开发中。尽管该类存在于较早的版本中,但在该较早版本中不支持使用它和其他手势识别类别。您不应该尝试使用这些课程的实例。

查看全文 这里.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top