2010-02-14 93 views
0

我正在製作一個iPhone應用程序,用戶可以在其中執行手勢(左右滑動)來滑動標籤。我的問題是,有些頁面有pickerview,webview,文本框和按鈕等視圖。這些滑動不適用於這些。有什麼辦法可以有全球性的手勢嗎?iPhone - 在UIPickerView和UIWebView上的手勢

作爲參考,我的手勢代碼例如:

//Swipe between tabs 
#define mindrag 100 
CGPoint mystartTouchPosition; 
BOOL isProcessingListMove; 
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    UITouch *touch = [touches anyObject]; 
    CGPoint newTouchPosition = [touch locationInView:self.view]; 
    if(mystartTouchPosition.x != newTouchPosition.x || mystartTouchPosition.y != newTouchPosition.y) { 
     isProcessingListMove = NO; 
    } 
    mystartTouchPosition = [touch locationInView:self.view]; 
    [super touchesBegan:touches withEvent:event]; 
} 

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    UITouch *touch = touches.anyObject; 
    CGPoint currentTouchPosition = [touch locationInView:self.view]; 

    // If the swipe tracks correctly. 
    double diffx = mystartTouchPosition.x - currentTouchPosition.x + 0.1; // adding 0.1 to avoid division by zero 
    double diffy = mystartTouchPosition.y - currentTouchPosition.y + 0.1; // adding 0.1 to avoid division by zero 

    if(abs(diffx/diffy) > 2.5 && abs(diffx) > mindrag) 
    { 
     // It appears to be a swipe. 
     if(isProcessingListMove) { 
      // ignore move, we're currently processing the swipe 
      return; 
     } 

     if (mystartTouchPosition.x < currentTouchPosition.x) { 
      isProcessingListMove = YES; 
      self.tabBarController.selectedViewController = [self.tabBarController.viewControllers objectAtIndex:1]; 
      return; 
     } 
     else { 
      isProcessingListMove = YES; 

      self.tabBarController.selectedViewController = [self.tabBarController.viewControllers objectAtIndex:3]; 

      return; 
     } 
    } 
    else if(abs(diffy/diffx) > 1) 
    { 
     isProcessingListMove = YES; 
     [super touchesMoved:touches withEvent:event]; 
    } 
} 

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    isProcessingListMove = NO; 
    [super touchesEnded:touches withEvent:event]; 
} 
// End of swipe 

任何輸入被理解。

回答

1

您可以繼承UIImagePickerControllerUIWebView,並將這些手勢捕捉視圖添加到它們,只要您的手勢檢測仍然可以將觸摸傳遞給底層視圖。

+0

是的,但我得到的錯誤,因爲這些不是意見。 – intl 2010-02-15 02:13:50

+0

'UIImagePickerController'是一個具有'view'屬性的控制器。 'UIWebView'繼承自'UIView'。 – 2010-02-15 19:33:43