2010-03-29 55 views
3

我最近asked a question关于子视图中的碰撞检测,有一个完美的答案。我已经到了应用程序碰撞的最后一点,但我遇到了一个新问题。先进的方式使用UIView convertRect方法多次检测CGRectIntersectsRect

使用convertRect很好,从子视图获取CGRect。我需要它稍微复杂一些,因为它不是完全需要检测的矩形。

我在XCode上创建了一个名为TileViewController的抽象类。在其他属性中,它有一个IBOutlet UIView * detectionView; 我现在有多个继承自TileViewController的类,每个类都有多个嵌套在我使用Interface Builder创建的detectionView中的视图。

想法是一个对象可能是某种形状或大小,我已经编程地将这些“平铺”检测点放置在每个对象的底部中心。用户可以选择一个项目并与之交互,在这种情况下移动它。

现在该方法本身在一定程度上工作,但我不认为它正在处理嵌套值,因为检测关闭。

此方法的简化版本的工作原理 - 在检测视图本身上使用CGRectIntersectsRect,所以我想知道如果我循环并检查正确的意见?

我不确定它是否在相同的视图进行比较,但我怀疑是这样,我在一点修改了代码,而不是比较self.view中的值我将viewController.detectView的UIViews交互式的View.detectView但结果是一样的。

它操纵这样子视图改变颜色,但他们改变颜色时,他们甚至不接触,而在这个时候摸错UIviews有变色

回答

1

我使用convertRect时摸索出了我的问题。

我以为我会再次阅读文档(相信我我一直在阅读它),但我错过了以前的关键信息。使用convertRect:toView:要使用的视图需要尽可能在doc提到的转换操作的目标的方法中,但我用的视图本身作为目标,而不是父视图

interactRect = [detectInteractView convertRect:[detectInteractView frame] toView:parentView]; 

这是错误的,我知道在这篇文章中没有太多细节,但最终你不能使用与目标视图相同的UIView,或者至少如果你能我不能在这里工作!