我是新来发布在这个论坛上,但不能告诉你多少次阅读它帮助了我。目前我正在开发一款适用于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的顶行位于子视图中。
有什么建议吗?
答案 0 :(得分:2)
您将点击位置转换为gridView
的坐标系。但是你检查它是否包含在gridView
的框架中,它位于超视图坐标系中。
您有两种方法可以解决此问题:
使用gridView
的coodinate系统:
CGPoint currentLocation = [[touches anyObject] locationInView:self.gridView.superview];
或使用superview的coodinate系统:
CGRect gridRect = self.gridView.bounds;