【问题标题】:Enable / Disable Touch Events on UIImageView Object在 UIImageView 对象上启用/禁用触摸事件
【发布时间】:2013-06-03 00:08:32
【问题描述】:

我已经阅读了许多有关启用/禁用触摸事件的问题的答案,但对我没有任何帮助,所以我问自己一个问题。

我有一个 UIImageView 对象 (spot):

// in my view controller header file:
@property (nonatomic, strong) IBOutlet UIImageView *spot;

然后我有与这个对象相关的代码:

// in my view controller .m file:
@synthesize spot

- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    // handle when that spot is touched ... 
}

而且效果很好。例如,我可以在点击地点时改变地点显示的图像。

首先我想看看如何在现场禁用触摸事件,所以我尝试了:

[[UIApplication sharedApplication] beginIgnoringInteractionEvents];

而且效果很好。在某些时候,根据我想要做什么,我能够禁用所有触摸事件。

然后我向这个视图控制器添加了一个按钮,我希望该按钮始终可点击,并始终为该按钮启用触摸事件。

所以现在我禁用触摸事件的方法不起作用,因为它太笨拙了。它会清除该视图中任何位置的所有触摸事件。

我只想禁用该位置的触摸事件。我试过了:

spot.userInteractionEnabled = NO;

但这没有用。该点仍然是可点击的。我也试过了:

[spot1 setUserInteractionEnabled:NO];

也没有用。我很困惑为什么这些不起作用。我的问题是:

我怎样才能在这一点上禁用触摸事件,这一个 UIImageView 对象?

编辑:为了解决下面提出的问题,在 Interface Builder 中,在我的 .xib 中,我已将 UIImageView 对象链接到我的头文件中设置的属性。那是它的参考出口。

【问题讨论】:

  • 您将手势识别器添加到何处?
  • 在我的 .xib 中,我有一个 UIImageView 链接到我的头文件中设置的属性。它附加到:@property (nonatomic, strong) IBOutlet UIImageView *spot; 这是它的引用出口。
  • 在 Xcode 的界面设计器中取消勾选“User Interaction Enabled”以禁用任何类型的交互
  • 在界面设计器中,我取消了“辅助功能”窗格中的“启用用户交互”框。 “视图”窗格中的“已启用用户交互”框已取消选中。没有任何效果。该点仍然可以点击。

标签: ios objective-c uiimageview touch


【解决方案1】:

为什么要为您的位置禁用触摸?如果触摸是从现场进行的,您可以简单地跳过处理。

 -(void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event {
     UITouch *touch = [[event allTouches] anyObject];

     CGPoint touchLocation = [touch locationInView:self.view];
     if (CGRectContainsPoint(spot.frame, touchLocation))
         return;

     if (CGRectContainsPoint(button.frame, touchLocation)){
         //do something
     }
 }

【讨论】:

  • 所以情况是我确实想要处理触摸直到一个点。然后我想禁用触摸。 (这是一个游戏。)所以当游戏开始时,我的touchesBegan withEvent 方法可以正确处理触摸。但是在某个时刻——在那个点被触摸之后——需要在该点禁用触摸。
  • BOOL spotWasTouched 也许? :)
  • 我不明白你的建议。是的,我可以知道该点何时被触摸,因此 spotWasTouched 布尔值本身无济于事。我在问需要什么代码才能在某个点禁用触摸点(UIImageView 对象)的能力。因此,在代码中的任何给定点,我都可以说“嘿,我不想再对触摸这些特定的 UIImageView 对象做出回应。
  • 您可以在代码中的任何位置设置布尔变量。然后,在-(void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event 方法中,您可以检查此变量并忽略处理,如果触摸帧与您的点的帧相匹配并且值为真。如果要再次为点启用触摸处理,则需要将此变量设置为 false。因此,如果触摸帧与点触摸帧不匹配将启用。而且,如果帧数相等,触摸响应将取决于此变量。
  • 我写的地方:“触摸的框架匹配点的框架”,你应该阅读:“触摸点包含在点的框架中”:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-19
  • 1970-01-01
  • 2015-12-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多