如何检测突破应用程序中的视图冲突?

Posted

技术标签:

【中文标题】如何检测突破应用程序中的视图冲突?【英文标题】:How to detect view collision in a breakout app? 【发布时间】:2015-05-13 18:44:31 【问题描述】:

所以我正在快速开发一个 Breakout 应用程序。我目前有一个球,它是一个 UIView 和一个 cornerRadius = 20.0 来模拟一个球。我还有一个桨,它是另一个 UIView 和一个较小的 cornerRadius = 5.0。我以编程方式制作了九个红色视图,每个视图大小为 50x50 单位。我的球、桨和块元素具有碰撞和运动机制。`var dynamicAnimator: UIDynamicAnimator!

var pushBehavior: UIPushBehavior!

var collisionBehavior: UICollisionBehavior!

var ballDynamicBehavior: UIDynamicItemBehavior!

var paddleDynamicBehavior: UIDynamicItemBehavior!

var blockBehaviors: UIDynamicItemBehavior!

我的问题是,球与积木相撞,但我不知道如何检测球是否击中积木,但我知道如何使视图出现和消失(给出视图与视图颜色匹配的背景色,并将其从块行为中删除。基本上,我想知道如何检测两个视图何时通过.function 或其他方式发生碰撞。

如果我还可以添加多个级别,那也很棒,哈哈。

【问题讨论】:

【参考方案1】:

UICollisionBehavior 需要一个采用 UICollisionBehaviorDelegate 协议的委托。这个委托有一个方法collisionBehavior,只要检测到碰撞就会被调用。

例如:

var collisionBehavior: UICollisionBehavior!       // create a UICollisionBehavior as you have done
collisionBehavior.addItem(ball)                   // add your items to it
collisionBehavior.addItem(block)                  // (faster to do this in the init step with `items` argument)
collisionBehavior.collisionDelegate = myDelegate  // give it a delegate which adopts UICollisionBehaviorDelegate
dynamicAnimator.addBehavior(collisionBehavior)    // add the behavior to your animator

然后为您的委托类实现func collisionBehavior。通常人们只是将UIViewController 本身用作代表,因此上面的行将显示为collisionBehavior.collisionDelegate = self

请参阅此处的“使对象响应碰撞”以获取简短的教程:http://www.raywenderlich.com/76147/uikit-dynamics-tutorial-swift。

【讨论】:

以上是关于如何检测突破应用程序中的视图冲突?的主要内容,如果未能解决你的问题,请参考以下文章

R中的时间序列突破/变化/干扰检测:结构、变化点、突破检测、bfast等

php - Zend Framework中的冲突视图助手名称

R中的时间序列突破/变化/干扰检测:结构,变化点,突破检测,bfast等

冲突检测指令如何使向量化循环变得更容易?

如何检测按下的按钮并将其显示在另一个视图上? Objective-C

检测外键冲突