UIDynamicBehavior动力学动画效果

本文深入探讨了iOS中的UIDynamicBehavior,通过引用斯坦福大学视频中的实例,展示了如何利用它来创建丰富而动态的动画效果,涵盖了物理模拟、碰撞检测等关键概念。
摘要由CSDN通过智能技术生成

引用斯坦福视频中的例子

.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];
}
点击屏幕,会发生随机掉落各种颜色方块的动画。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值