禁用GestureRecognizer

时间:2015-02-10 22:00:28

标签: ios ipad uigesturerecognizer uitapgesturerecognizer

我有一个简单的记忆游戏。 但我想关掉点按功能。

当我使用imageViewGurka1.gestureRecognizers=NO;时,它有效,但我收到警告消息:Initialization of pointer of type 'NSArray *' to null from a constant boolean expression。 (我该怎么做才能修复此警告信息?)

如果我使用此imageViewGurka1 setUserInteractionEnable:NO;我没有收到警告信息,但我将无法再移动图像。

以下是一些代码。

-(IBAction)handleTapGurka1:(UIGestureRecognizer *)sender {

if (imageViewGurka1.tag == 0) {
    [imageViewGurka1 setImage:[UIImage imageNamed:@"memorySångerGurka.png"]];
    imageViewGurka1.tag=1;
    [self.view bringSubviewToFront:imageViewGurka1];

}

else {
    [imageViewGurka1 setImage:[UIImage imageNamed:@"memorySångerBaksida.png"]];
    imageViewGurka1.tag=0;
    [self.view bringSubviewToFront:imageViewGurka1];
}

if (imageViewGurka1.tag==1 && imageViewGurka2.tag==1) {
    NSURL *musicFile;
    musicFile = [NSURL fileURLWithPath:
                 [[NSBundle mainBundle]
                  pathForResource:@"applader"
                  ofType:@"mp3"]];
    myAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:musicFile error:nil];
    [myAudio play];
    //[imageViewGurka1 setUserInteractionEnabled:NO];
    //[imageViewGurka2 setUserInteractionEnabled:NO];
    imageViewGurka1.gestureRecognizers=NO;
    imageViewGurka2.gestureRecognizers=NO;
}

}

感谢您的帮助!

此致

4 个答案:

答案 0 :(得分:6)

gestureRecognizers是一个包含附加到视图的所有手势识别器的数组。您应该循环遍历该数组中的所有手势识别器,并将其enabled属性设置为false,如下所示:

for (UIGestureRecognizer * g in imageViewGurka1.gestureRecognizers) {
    g.enabled = NO;
}

答案 1 :(得分:3)

故事板/插座解决方案

背景: 我有一个UIView,我想像按钮一样,所以我添加了一个轻敲手势识别器。当用户点按“按钮”按钮时我想禁用按钮,执行一些动画,并在动画后重新启用按钮。

解决方案:如果您正在使用故事板并且您向UIView添加了手势识别器,请从手势识别器控制+拖动到助手编辑器中以创建插座。然后,您可以设置gestureRecognizerName.isEnabled = false

@IBOutlet var customButtonGestureRecognizer: UITapGestureRecognizer!

@IBAction func didTapCustomButton(_ sender: Any) {
    customButtonGestureRecognizer.isEnabled = false
    performSomeAnimation(completionHandler: {
        self.customButtonGestureRecognizer.isEnabled = true
    })
}

enter image description here

答案 2 :(得分:3)

在swift4,

如果在许多视图中有很多手势,你可以启用和禁用这样的手势。

假设我们有UIView数组,我们想要禁用一个手势,这是添加到名为ourView的视图数组中第一个视图的第一个手势。

   ourView[0].gestureRecognizers![0].isEnabled = false

答案 3 :(得分:0)

基于 Apple 的 Documentation,您还可以使用:

func removeTarget(Any?, action: Selector?)