Point不在Rect中,但CGRectContainsPoint表示是

时间:2009-06-11 06:25:14

标签: objective-c iphone cocoa-touch uiimageview core-graphics

如果我有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)

有什么建议吗?

2 个答案:

答案 0 :(得分: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的子类。

答案 1 :(得分:4)

你的逻辑只是倒置了。 CGRectContainsPoint()方法返回bool,即“yes”为true。 True不等于0。