1. 程式人生 > >iOS 9中UIDynamics實現真正的圓形碰撞

iOS 9中UIDynamics實現真正的圓形碰撞

我們常見的碰撞都是矩形碰撞,即使修改了view的cornerRadius,讓圖片看上去像圓形,但碰撞的時候,依然是矩形碰撞。

UIDynamics 的第一個版本帶有碰撞系統(在 UICollisionBehavior 中)只支援矩形。這可以理解,因為UIViews都是矩形架構,但是圓形的卻不常見,更不用說優化一個自定義的貝塞爾曲線。在iOS 9中,UIDynamicItem協議里加了一個新屬性:UIDynamicItemCollisionBoundsType,支援以下列舉型別:

  • Rectangle

  • Ellipse

  • Path

但這個屬性是隻讀的,需要進行以下修改:

//1.

UIDynamicItemGroup類中,有一個collisionBoundsType的屬性,可以修改屬性值,進而修改控制元件的碰撞邊緣。(應該是ios9.0才有的)

    NS_CLASS_AVAILABLE_IOS(9_0) @interface UIDynamicItemGroup : NSObject <UIDynamicItem>

    @property (nonatomic, readonly) UIDynamicItemCollisionBoundsType collisionBoundsType NS_AVAILABLE_IOS(9_0);

//2.但是,這個collisionBoundsType

是隻讀的,所以需要建立一個繼承自UIView的類,改寫這個屬性:

    @interface DZView : UIView

    @property (nonatomic) UIDynamicItemCollisionBoundsType collisionBoundsType;

    @end

    @implementation DZView

    @synthesize  collisionBoundsType;  //一定要寫上這句程式碼

    @end

//3. 然後用這個類建立一個View,設定其collisionBoundsType屬性就可以了。

    DZView * basketBallView = [[DZView alloc]init];

    basketBallView.collisionBoundsType = UIDynamicItemCollisionBoundsTypeEllipse;

接下來,你就可以實現如下情景了: