1. 程式人生 > >iOS_實現物理模擬中的圓形碰撞

iOS_實現物理模擬中的圓形碰撞

  • 由於UI控制元件都矩形的,即使進行對layer層進行,直接對控制元件進行圓形切割,在進行物理模擬時,控制元件依舊是按照矩形進行物理模擬。
  • 通過檢視,我們可以發現所有的UIView內都包含UIDynamicItem,在這裡麵包含一個列舉UIDynamicItemCollisionBoundsType,我們可以通過設定這個值來控制控制元件是否進行圓形碰撞模擬。
  • 但是,每個UIView都包含有屬性型別為UIDynamicItemCollisionBoundsType 的屬性值,而且只讀。為了更改這個值,我們就需要重新建立繼承自UIView或者UIView子類的控制元件,然後在建立的類內定義新的型別為UIDynamicItemCollisionBoundsType
    的屬性值,這樣可以重寫父類的屬性值。
    示例:
@interface RoundImageView : UIImageView
@property (nonatomic,assign) UIDynamicItemCollisionBoundsType collisionBoundsType;

@end
  • 記得在實現檔案內新增@synthesize collisionBoundsType;
    示例:
@implementation RoundImageView
// 記得新增此行程式碼
@synthesize collisionBoundsType;

/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect {

}
*/
@end

然後在呼叫控制元件的建立的同時,為控制元件的collisionBoundsType 屬性賦值為UIDynamicItemCollisionBoundsTypeEllipse
示例:

RoundImageView *imageView = [[RoundImageView alloc]initWithFrame:CGRectMake(self.bounds.size.width/2, self.bounds.size.height/2, 30, 30)];
        imageView.layer.masksToBounds = YES;
        imageView.backgroundColor
= [UIColor colorWithRed:arc4random() % 256/255.0 green:arc4random() % 256/255.0 blue:arc4random() % 256/255.0 alpha:0.5]; imageView.layer.cornerRadius = imageView.bounds.size.width/2; // 此行—————————— imageView.collisionBoundsType = UIDynamicItemCollisionBoundsTypeEllipse; [self addSubview:imageView]; [self.gravity addItem:imageView]; [self.collision addItem:imageView];

效果圖:
這裡寫圖片描述