获得更准确的CGRectContainsPoint结果

时间:2009-11-10 13:38:54

标签: iphone

我是新来发布在这个论坛上,但不能告诉你多少次阅读它帮助了我。目前我正在开发一款适用于iPhone的游戏,它有一个UIImageViews网格,它包含在我的gameboardViewController的子视图中。我在ViewDidLoad上构建网格。好到目前为止。现在我正在使用touchesBegan来确定哪个UIImageViews被触及了哪种类型的作品。我说有点 - 因为CGRectContainsPoint似乎给出了一个错误的结果,这意味着该函数的顶行被该函数认为是在我的子视图rect之外。

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *) event
{

    UITouch *touch = [touches anyObject];
    CGPoint currentLocation = [[touches anyObject] locationInView:self.gridView];

    CGRect gridRect = self.gridView.frame;
    // Since I have an overlay I want to ignore touches when this subview is visible.
    if(self.readyScreen.hidden)
    {
        /* restrict the touches to only the subview gridView so any stray touches should be ignored.*/
        if(CGRectContainsPoint(gridRect,currentLocation) )
        {
            UIImageView *theTile = (UIImageView *)touch.view;
            [self gridItemTouched:theTile];
        }
    }

}

由于某些原因,不足以看到50 x 50 UIImageViews的顶行位于子视图中。

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

您将点击位置转换为gridView的坐标系。但是你检查它是否包含在gridView的框架中,它位于超视图坐标系中。

您有两种方法可以解决此问题:

使用gridView的coodinate系统:

CGPoint currentLocation = [[touches anyObject] locationInView:self.gridView.superview];

或使用superview的coodinate系统:

CGRect gridRect = self.gridView.bounds;