uigeSturerocgognizer在
-
30-09-2019 - |
题
这是可以预料的,但是我似乎找不到一个运行时正常工作的,因为它似乎是私人的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开始,但在此之前的短时间内就在开发中。尽管该类存在于较早的版本中,但在该较早版本中不支持使用它和其他手势识别类别。您不应该尝试使用这些课程的实例。
查看全文 这里.
不隶属于 StackOverflow