ios - 无法成功移除GestureRecognizer iOS

标签 ios uigesturerecognizer

我的 iPad 应用程序中有一个按钮,当按下它时,它会添加手势识别器。再次按下时,它应该会删除它们。

我的代码在 if block 中,我知道运行了正确的代码块,因为 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

它不起作用,我不明白为什么,你们有什么建议吗?

提前感谢所有帮助和建议:)

最佳答案

您的 GestureReconizers 在本地声明为 -showMenu: 方法。 因此,每次按下按钮时,都会创建新的 GestureReconizers,因此您不会尝试删除以前的 reconizers,而是尝试删除新创建的。

更改您的 reconizers 对象的范围,您的问题将得到解决。

干杯。

使用代码示例进行编辑:

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

    }
}

关于ios - 无法成功移除GestureRecognizer iOS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13540852/

相关文章:

细胞中的 swift GestureRecognizer

ios - 来自 HealthKit 的数据最初丢失,然后当我重试时又出现 - 如何修复?

iphone - 有没有Apple Direction API?

iphone - iOS 和处理大型数据库

iphone - 识别不在某个 subview 中的手势

objective-c - 区分点击和滚动 - iOS

ios - 类型 'UIGestureRecognizer' 的值没有成员 'numberOfTapsRequired' 为什么会出现此错误?

ios - 无法在ios中下载文件

ios - UINavigationBar 奇怪的标准高度

ios - 如果 UIGestureRecognizer 触发,如何取消按钮点击?