将UITouch位置与UIImageView矩形进行比较

时间:2010-02-08 12:01:01

标签: iphone objective-c cocoa-touch uikit uitouch

我有以下代码来确定触摸是否在我的表格单元格的图像视图中。但是,它不起作用。我将这两者与CGRectContainsPoint进行了比较,但它不起作用。这是代码:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event    
{
     // Declare the touch and get it's location

     UITouch *touch = [touches anyObject];

     CGPoint touchLocation = [touch locationInView:self];

     if (CGRectContainsPoint(myImageView.frame, touchLocation))
     {
        NSLog(@"Tapped image view");
     }    
}

感谢您的帮助!

4 个答案:

答案 0 :(得分:26)

  

然而,它不起作用。

请更具体。

 UITouch *touch = [touches anyObject];

为什么不检查每次触摸,而不是简单地随机选择它们?

* The documentation for anyObject表示您无法保证会给您哪一个。你甚至不能保证它是随机的;它每次都可能是同一个对象。墨菲定律说,无论是否随机,它都是错误的。

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

您的frame在您的超级视图的坐标系中; [touch locationInView:self]会在您的坐标系统中返回触摸点。您想在bounds内进行测试,这是在您的坐标系统中。 The documentation explains the difference.

答案 1 :(得分:1)

问题是您需要调用[触摸locationInView:myImageView]来获取图像视图坐标系中的点。然后检查它是否在框架内。

答案 2 :(得分:1)

UITouch *touch = [[event allTouches] anyObject];
CGPoint location = [touch locationInView:self];
if ([touch view]==view) {
view.center=location;
}

在触摸移动事件中写下它。感谢名单

答案 3 :(得分:0)

请记住,当您要求触摸locationInView:时,您将获得相对于该视图框架的点。所以,假设您提供的代码片段包含在UIViewController的子类中,您应该要求

CGPoint touchLocation = [touch locationInView:self.view];

这将为您提供与您的观点相关的观点。您想要一个相对于当前视图的点的原因是因为图像视图的框架也相对于其父视图 - 相同的视图。所以现在应该可以了。

 if (CGRectContainsPoint(myImageView.frame, touchLocation)) {
    NSLog(@"Tapped image view");
 }