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;


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




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章