引用斯坦福视频中的例子
.h
#import <UIKit/UIKit.h>
@interface MyDynamicBehavior : UIDynamicBehavior
- (void)addItem:(id<UIDynamicItem>)item;
- (void)removeItem:(id<UIDynamicItem>)item;
@end
.m
#import "MyDynamicBehavior.h"
@interface MyDynamicBehavior ()
@property (nonatomic, strong) UIGravityBehavior *gravity;
@property (nonatomic, strong) UICollisionBehavior *collider;
@end
@implementation MyDynamicBehavior
- (UICollisionBehavior *)collider{
if (!_collider) {
_collider = [[UICollisionBehavior alloc]init];
_collider.translatesReferenceBoundsIntoBoundary = YES;
}
return _collider;
}
- (UIGravityBehavior *)gravity{
if (!_gravity) {
_gravity = [[UIGravityBehavior alloc]init];
_gravity.magnitude = 0.9;
}
return _gravity;
}
- (void)addItem:(id<UIDynamicItem>)item{
[self.gravity addItem:item];
[self.collider addItem:item];
}
- (void)removeItem:(id<UIDynamicItem>)item{
[self.gravity removeItem:item];
[self.collider removeItem:item];
}
- (instancetype)init{
self = [super init];
[self addChildBehavior:self.gravity];
[self addChildBehavior:self.collider];
return self;
}
@end
使用:
@property (weak, nonatomic) IBOutlet UIView *gameView;
@property (nonatomic, strong) UIDynamicAnimator *animator;
@property (nonatomic, strong) MyDynamicBehavior *myDynamicBehavior;
@property (nonatomic, strong) UIView *myView;
@property (nonatomic, strong) UIView *myView2;
#define DROP_WIDTH 40
//static const CGSize DROP_SIZE = {DROP_WIDTH, DROP_WIDTH};
- (MyDynamicBehavior *)myDynamicBehavior{
if (!_myDynamicBehavior) {
_myDynamicBehavior = [[MyDynamicBehavior alloc]init];
[self.animator addBehavior:_myDynamicBehavior];
}
return _myDynamicBehavior;
}
- (UIDynamicAnimator *)animator{
if (!_animator) {
_animator = [[UIDynamicAnimator alloc]initWithReferenceView:self.gameView];
}
return _animator;
}
- (IBAction)tap:(UITapGestureRecognizer *)sender {
[self drop];
}
- (void)drop{
CGRect frame;
frame.origin = CGPointZero;
frame.size = CGSizeMake(DROP_WIDTH, DROP_WIDTH);
int x = arc4random()%(int)([UIScreen mainScreen].bounds.size.width)/DROP_WIDTH;
frame.origin.x = x * DROP_WIDTH;
UIView *dropView = [[UIView alloc]initWithFrame:frame];
dropView.backgroundColor = [self randomColor];
[self.gameView addSubview:dropView];
[self.myDynamicBehavior addItem:dropView];
}
- (UIColor *)randomColor{
switch (arc4random()%5) {
case 0:
return [UIColor greenColor];
case 1:
return [UIColor blueColor];
case 2:
return [UIColor orangeColor ];
case 3:
return [UIColor redColor];
case 4:
return [UIColor purpleColor];
}
return [UIColor blackColor];
}
点击屏幕,会发生随机掉落各种颜色方块的动画。