Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa touch 如何从其他触摸事件中识别按钮触摸事件_Cocoa Touch_Uiimageview_Uibutton_Touch - Fatal编程技术网

Cocoa touch 如何从其他触摸事件中识别按钮触摸事件

Cocoa touch 如何从其他触摸事件中识别按钮触摸事件,cocoa-touch,uiimageview,uibutton,touch,Cocoa Touch,Uiimageview,Uibutton,Touch,我有一个应用程序,用户可以在其中与许多对象进行交互。这些是几个ui按钮、几个ui标签和许多ui图像视图 所有交互的焦点都集中在触摸UIImageView对象上。通过触摸,我可以移动图像,告诉他们做这个或那个。然而,我目前的障碍在于知道如何正确地让应用程序区分当我触摸ui按钮时发生的触摸 为什么??Touchs Start事件中的逻辑仅适用于UIImageView,但是,当我触摸按钮或任何其他对象时,应用程序会将触摸视为发生在UIImageView对象上 因此,我的方法可以归结为:是否有一种好方法

我有一个应用程序,用户可以在其中与许多对象进行交互。这些是几个
ui按钮
、几个
ui标签
和许多
ui图像视图

所有交互的焦点都集中在触摸
UIImageView
对象上。通过触摸,我可以移动图像,告诉他们做这个或那个。然而,我目前的障碍在于知道如何正确地让应用程序区分当我触摸
ui按钮时发生的触摸

为什么??Touchs Start事件中的逻辑仅适用于
UIImageView
,但是,当我触摸按钮或任何其他对象时,应用程序会将触摸视为发生在
UIImageView
对象上

因此,我的方法可以归结为:是否有一种好方法可以识别
UIButton
UIImageView
UILabel
对象是否发生了触摸?这样我就可以从相关的触摸中过滤掉我应用程序中不相关的触摸

编辑

下面的代码概述了我如何捕获触摸事件,但是我不知道如何从触摸事件中知道我触摸的是按钮还是视图

touch = [touches anyObject];
touchLocation = [touch locationInView:[self view]];

在带有触摸事件的视图上调用
hitTest:withEvent:
,以获取实际被触摸的视图。然后,您可以使用
isKindOfClass:
检查它是什么类型的视图,并做出相应的响应。

在具有触摸事件的视图上调用
hitTest:withEvent:
,以获取实际被触摸的视图。然后,您可以使用
isKindOfClass:
检查它是什么类型的视图,并做出相应的响应。

您可以使用以下方法:-

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
    if ([self pointInside:point withEvent:event]) {
      //You clicked inside the object
    }
    return [super hitTest:point withEvent:event]
}
wain已经给了你解释了


您可以使用以下方法:-

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
    if ([self pointInside:point withEvent:event]) {
      //You clicked inside the object
    }
    return [super hitTest:point withEvent:event]
}
wain已经给了你解释了


要知道是否按下了UIButton,请执行以下操作:

-(void) touchBegan : (NSSet *) touches withEvent : (UIEvent *) even
{

 UITouch *touch = [touched anyObject];
 UIView *touchedView = [touch view];

 if([touchedView isMemberofClass : [UIButton class])
 {
   //do something when button is touched
 }
}

要知道是否按下了UIButton,请执行以下操作:

-(void) touchBegan : (NSSet *) touches withEvent : (UIEvent *) even
{

 UITouch *touch = [touched anyObject];
 UIView *touchedView = [touch view];

 if([touchedView isMemberofClass : [UIButton class])
 {
   //do something when button is touched
 }
}

显示您的触摸处理代码。您是否正在进行点击测试以找到触摸视图?代码非常复杂,因为它基于UIImageView处理和捕获触摸,UIImageView工作正常。问题是我不知道如何区分触摸UIImage和触摸UIButton。触摸事件是否包含一种识别方法?手势识别器:shouldReceiveTouch:如何从手势识别器代理引用中识别;“在触摸开始之前调用此方法:在手势识别器上为新触摸调用withEvent:。”您可以使用此方法在识别器获取任何不需要的触摸之前过滤掉它们。我感觉这对你来说太晚了,但也许它会起作用。显示你的触摸处理代码。您是否正在进行点击测试以找到触摸视图?代码非常复杂,因为它基于UIImageView处理和捕获触摸,UIImageView工作正常。问题是我不知道如何区分触摸UIImage和触摸UIButton。触摸事件是否包含一种识别方法?手势识别器:shouldReceiveTouch:如何从手势识别器代理引用中识别;“在触摸开始之前调用此方法:在手势识别器上为新触摸调用withEvent:。”您可以使用此方法在识别器获取任何不需要的触摸之前过滤掉它们。我感觉这对你来说太晚了,但也许它会起作用。我会研究这个解决方案,虽然它相当广泛。是否有任何方法可以使用上述方法过滤掉仅在UIImageView对象中发生的接触?我以前从未使用过这种方法。我也在度假,上网有限,这就是为什么我回信迟到的原因。@AGE抱歉,这没有什么特别的。。但是你也可以检查这个答案。。我会研究这个解决方案,尽管它非常广泛。是否有任何方法可以使用上述方法过滤掉仅在UIImageView对象中发生的接触?我以前从未使用过这种方法。另外,我正在度假,网络访问有限,这就是为什么我回信迟到的原因。@AGE抱歉,这没有什么特别的。。但是你也可以检查这个答案。。