2012-11-24 52 views
0

我的iPad應用程序中有一個按鈕,當它按下addGestureRecognizer的按鈕時。當再次按下時,它應該刪除它們。無法成功移除GestureRecognizer iOS

我的代碼在一個if塊中,我知道正確的代碼塊運行,因爲NSLog打印正確的日誌消息。

我加入了識別這樣的:

[self.view addGestureRecognizer:panRecognizer]; 
[self.view addGestureRecognizer:pinchRecognizer]; 
[self.view addGestureRecognizer:rotationRecognizer]; 
[self.view addGestureRecognizer:tapRecognizer]; 

,並試圖刪除它們像這樣:

[self.view removeGestureRecognizer:panRecognizer]; 
[self.view removeGestureRecognizer:pinchRecognizer]; 
[self.view removeGestureRecognizer:rotationRecognizer]; 
[self.view removeGestureRecognizer:tapRecognizer]; 

這是我的全部功能: http://www.pastelib.com/show/ZlICyb9Q

它不工作,我不知道爲什麼,你們有什麼建議嗎?提前

感謝所有幫助和建議:)

+0

當你調用哪個塊 - self.view每次有什麼(的NSLog( @「%@」,self.view)) –

+0

panRecognizer是一個實例對象嗎? –

+0

這是我的功能:http://www.pastelib.com/show/ZlICyb9Q,NSLog self.view每次給我一樣的:> – RAH

回答

2

你GestureReconizers被局部聲明的-showMenu:方法。 因此,每次按下按鈕時,都會創建新的GestureReconizers,因此您未嘗試刪除先前的重構器,但嘗試刪除新創建的重構器。

更改重組對象的範圍,並解決您的問題。

乾杯。

編輯與代碼示例:

-(IBAction) showMenu:(id) sender {  
    if([self.view.subviews containsObject:menuView]) { 

     NSLog(@"remove gestures!"); 

     // Dismiss menu 
     [menuView removeFromSuperview]; 

     // Remove gestures 
     [self.view removeGestureRecognizer:panRecognizer]; 
     [self.view removeGestureRecognizer:pinchRecognizer]; 
     [self.view removeGestureRecognizer:rotationRecognizer]; 
     [self.view removeGestureRecognizer:tapRecognizer];   
    }else{ 
     // Create menu   
     NSLog(@"add gestures!"); 

    panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panDetected:)]; 

    pinchRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchDetected:)]; 

    rotationRecognizer = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotationDetected:)]; 

    tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapDetected:)]; 

    tapRecognizer.numberOfTapsRequired = 2;  

    // Make gestures work simultaneously 
    panRecognizer.delegate = self; 
    pinchRecognizer.delegate = self; 
    rotationRecognizer.delegate = self; 

     // Set width and height if empty   
     self.menuController = [[menuController alloc] initWithNibName:@"menuController" bundle:nil]; 

     if(screenWidth == 0) { 

      UIInterfaceOrientation currentOrientation = [[UIApplication sharedApplication] statusBarOrientation]; 

      if(currentOrientation == 1 || currentOrientation == 2) { 
       // portrait 
       screenHeight = self.menuController.view.frame.size.height; 
       screenWidth  = self.menuController.view.frame.size.width; 
      }else{ 
       // Landscape 
       screenHeight  = self.menuController.view.frame.size.width; 
       screenWidth = self.menuController.view.frame.size.height+20; //height+20px for the status bar 
      } 
     } 

     int menuHeight = 80; 
     self.menuController.view.frame = CGRectMake(0,screenHeight-(menuHeight-20), screenWidth, menuHeight); 

     self.menuView = self.menuController.view; 

     [self.menuController setDelegate:self]; 

     [self addChildViewController:self.menuController]; 
     [self.menuController didMoveToParentViewController:self]; 
     [self.view addSubview:menuView]; 


     // Add image gestures 
     [self.view addGestureRecognizer:panRecognizer]; 
     [self.view addGestureRecognizer:pinchRecognizer]; 
     [self.view addGestureRecognizer:rotationRecognizer]; 
     [self.view addGestureRecognizer:tapRecognizer]; 

     [self.view bringSubviewToFront:menuButton];   

    } 
} 
+0

非常感謝你,這解決了我的問題,並且我學到了新東西:) – RAH

1

我這樣做在我的項目和它的工作:

while (cellMainView.descripcionArticulo.gestureRecognizers.count) { 
    [cellMainView.descripcionArticulo removeGestureRecognizer:[cellMainView.descripcionArticulo.gestureRecognizers objectAtIndex:0]]; 
} 
+0

謝謝!這對我有效。 – Reinaldo

+0

嘗試 對於(board.gestureRecognizers中的UIGestureRecognizer *手勢){ [board removeGestureRecognizer:gesture]; }' – mylogon