具有非矩形边界的UIDynamicItem

所以我正在考虑UIKitdynamic和我碰到的一个问题是,如果我想创build一个自定义drawRect:的UIView drawRect:例如,让我们说我想画一个三angular形),似乎没有办法指定用于UICollisionBehavior的UIView(或者说UIDynamicItem)的path。

我的目标实际上是在屏幕上有多边形相互碰撞,正如人们所期望的那样。

我想出了一个拼接多个视图在一起的解决scheme,但这似乎是我想要的矫枉过正。

有没有一些简单的方法来做到这一点,还是我真的必须一起缝合观点?

观看有关此主题的WWDC 2013video。 他们非常清楚:为了效率和速度的缘故,碰撞过程中视图的(矩形)界限是很重要的。

编辑在iOS 9中,dynamic项目可以具有自定义的碰撞边界。 你可以有一个由框架决定的矩形,一个由框架决定的椭圆,或者一个自定义的形状 – 一个逆时针的简单封闭的UIBezierPath。 相关属性collisionBoundsType和(对于自定义形状) collisionBoundingPath是只读的,因此您必须进行子类化才能设置它们。

如果你真的想碰撞多边形,你可能会考虑SpriteKit和它的物理引擎(它似乎与UIDynamics有许多共同之处)。 它可以与UIKit混合使用,虽然可能不如你所愿。