所以我正在使用swift的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!
我的问题在于球是否与球碰撞,但我不知道如何检测球是否击中了阻挡区,但我知道如何让视线出现并消失(给出视图)与View的颜色匹配的backgroundcolor,并将其从blockBehaviors中删除。基本上,我想知道如何检测两个视图何时通过.function或其他东西发生碰撞。
如果我还可以添加多个级别,那也很棒,哈哈。
答案 0 :(得分:0)
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。