4

如果我有一个 UIImageView 并且想知道用户是否点击了图像。在 touchesBegan 中,我执行以下操作,但始终以第一个条件结尾。窗口处于纵向模式,图像位于底部。我可以点击窗口的右上角,仍然进入第一个条件,这似乎很不正确。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
CGPoint location = [touch locationInView:touch.view];

if(CGRectContainsPoint(myimage.frame, location) == 0){
//always end up here
}
else
{ //user didn't tap inside image}

值是:

location: x=303,y=102
frame: origin=(x=210,y=394) size=(width=90, height=15)

有什么建议么?

4

2 回答 2

19

首先,您可以接触到:

UITouch *touch = [[event allTouches] anyObject];

接下来,您要检查相对于图像视图的 locationInView。

CGPoint location = [touch locationInView:self]; // or possibly myimage instead of self.

接下来,CGRectContainsPoint 返回一个布尔值,因此将其与 0 进行比较是很奇怪的。它应该是:

if ( CGRectContainsPoint( myimage.frame, location ) ) {
   // inside
} else {
   // outside
}

但是如果 self 不是 myimage 那么 myimage 视图可能会得到触摸而不是你 - 从你的问题中不清楚它是什么对象 self 它不是所讨论的 UIImageView 的子类。

于 2009-06-11T06:41:16.257 回答
4

你的逻辑只是颠倒了。该CGRectContainsPoint()方法返回布尔值,即“是”为真。真不等于 0。

于 2009-06-11T06:32:18.657 回答