1。碰撞
需要确定边界线,使 增加了各动画行为(UIDynamicBehavior)的视图 在执行动画过程中 不能越界
translateReferenceBoundsIntoBoundary : YES (将参照视图的边界作为碰撞行为的侦测边界,即在参照视图中所有已增加了collisionBehavior的项在执行动画效果时,均不能越过参照视图的边界)
- (void) addBoundaryWithIdentifier : (id<NSCopying>) identifier fromPoint : (CGPoint) p1 toPoint : (CGPoint) p2 ; // 自定义边界
2。collisionMode 碰撞模式
UICollisionBehaviorModeItems : between dynamic items
UICollisionBehaviorModeBoundaries : between every dynamic item and the boundaries
UICollisionBehaviorModeEverything : above all , default value
3。<UICollisionBehaviorDelegate>
myCollision.collisionDelegate = self ;
- (void) collisionBehavior : (UICollisionBehavior*) paramBehavior beganContactForItem : (id <UIDynamicItem>) paramItem withBoundaryIdentifier : (id <NSCopying>) paramIdentifier atPoint : (CGPoint) paramPoint // 开始碰到边界时调用
collisionBehavior : endedContactForItem : withBoundaryIdentifier : atPoint :
e.g.
- (void) collisionBehavior : (UICollisionBehavior*) paramBehavior beganContactForItem : (id <UIDynamicItem>) paramItem withBoundaryIdentifier : (id <NSCopying>) paramIdentifier atPoint : (CGPoint) paramPoint {
NSString *identifier = (NSString *) paramIdentifier; //边界标识符
if ( [ identifier isEqualToString : @"boundaryIdentifier" ] ) { //与之前定义的边界边识符相比较
[ UIView animateWithDuration : 1.0f animations : ^{
UIView *view = (UIView *) paramItem ; //每个碰撞的视图
view.backgroundColor = [ UIColor purpleColor ] ;
view.alpha = 0.0f ; //完全透明
view.transform = CGAffineTransformMakeScale(2.0f, 2.0f) ;
} completion : ^(BOOL finished) { //动画完成后
UIView *view = (UIView *) paramItem;
[ paramBehavior removeItem : paramItem ] ;
[ view removeFromSuperview ] ;
} ] ;
}
} //最终效果:碰到边界时,活动视图会先变为purple色,然后慢慢消失(alpha=0.0)