如果我有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)
有什么建议吗?
答案 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。