禁用手势识别器

Posted

技术标签:

【中文标题】禁用手势识别器【英文标题】:Disable GestureRecognizer 【发布时间】:2015-02-10 22:00:28 【问题描述】:

我有一个简单的记忆游戏。 但是我想关闭点击功能。

当我使用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;



感谢您的帮助!

问候

【问题讨论】:

gestureRecognizers 不是布尔值(如错误所示),并且没有尝试查阅 UIGestureRecognizer 上的文档,答案很简单。 【参考方案1】:

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

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

斯威夫特 5

低于 Swift 5 的等价物

for gesture in imageViewGurka1.gestureRecognizers! 
    gesture.isEnabled = false

【讨论】:

如果我将该代码放在 [myAudio play] 之后;我收到错误消息:预期的'('在for'之后......我应该把“()”放在哪里谢谢你的帮助! 啊,抱歉弄错了。我用 Swift 而不是 Obj-C 写了答案。我现在已将其更改为 Obj-C。如果您无法区分,请购买,您应该先学习该语言,然后再尝试开发应用程序。 感谢您的帮助。我确实是这样做的。 for (UIGestureRecognizer *Gurka1 in imageViewGurka1.gestureRecognizers) Gurka1.enabled = NO; for (UIGestureRecognizer *Gurka2 in imageViewGurka2.gestureRecognizers) Gurka2.enabled = NO; 没错。我忘记了 * 运算符。当您不断在两种不同的语言之间切换时会发生这种情况:) 请接受答案。 接受答案?我在哪里做呢?【参考方案2】:

在 swift4,

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

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

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

您还可以像这样同时启用或禁用所有手势。

   for k in 0..<ourView.count 
      for l in 0..<outView[k].gestureRecognizers.count 
         ourView[k].gestureRecognizers![l].isEnabled = false 
      
   

【讨论】:

【参考方案3】:

故事板/插座解决方案

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

解决方案:如果您正在使用情节提要并且您将手势识别器添加到 UIView,请从手势识别器控制并拖动到助手编辑器中以创建出口。然后可以设置gestureRecognizerName.isEnabled = false

@IBOutlet var customButtonGestureRecognizer: UITapGestureRecognizer!

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


【讨论】:

【参考方案4】:

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

func removeTarget(Any?, action: Selector?)

【讨论】:

以上是关于禁用手势识别器的主要内容,如果未能解决你的问题,请参考以下文章

仅针对特定视图禁用手势识别器

禁用手势识别器

在 AVPlayerViewController 中禁用手势识别器

禁用和启用页面视图控制器手势识别器?

禁用手势识别器

在玩游戏期间禁用 iOS 多任务手势识别器