如何检测突破应用程序中的视图冲突?
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等