2010-11-10 37 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