iOS_實現物理模擬中的圓形碰撞
阿新 • • 發佈:2019-02-19
- 由於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];
效果圖: