【问题标题】:Advance way of using UIView convertRect method to detect CGRectIntersectsRect multiple times使用 UIView convertRect 方法多次检测 CGRectIntersectsRect 的进阶方式
【发布时间】:2010-03-29 22:18:12
【问题描述】:

我最近asked a question关于子视图内的碰撞检测,有一个完美的答案。我已经到了在我的应用程序上实现碰撞的最后一点,但我遇到了一个新问题。

使用 convertRect 可以很好地从 subView 中获取 CGRect。我需要它稍微复杂一点,因为它并不完全是需要检测的矩形。

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

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

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

此方法的简化版本有效 - 在 detectionView 本身上使用 CGRectIntersectsRect 所以我想知道我是否正在循环并正确检查视图?

我不确定它是否在同一个视图中进行比较,但我怀疑是这样,我确实在某一点稍微修改了代码,而不是比较 self.view 中的值,我将 viewController.detectView 的 UIViews 放入interactiveView.detectView 但结果是一样的。

它是被操纵的,所以子视图会改变颜色,但是当它们甚至没有触摸时它们会改变颜色,并且当它们触摸错误的 UIviews 时会改变颜色

【问题讨论】:

    标签: iphone objective-c uiview collision-detection


    【解决方案1】:

    我在使用 convertRect 时解决了我的问题。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-16
      • 1970-01-01
      相关资源
      最近更新 更多