文章标题

动力效果动画

UIDynamic是从iOS7开始引入的一种新技术,属于UIKit框架,可以模拟现实生活中的物理现象

玩动力效果 如电吉他
动力效果器也有一个效果器 叫做 动力效果器 里面可以提那家动力效果。
动力效果切换效果,会把上一个效果移除
动力效果,可以叠加对个效果

使用UIDynamic 大体步骤:
1、创建一个动力效果器(UIDynamicAniamtor)
2、创建动力效果(Behavior)添加到对应的视图上

UIDynamic提供的动力效果
UIGravityBehavior:重力效果
UICollisionBehavior:碰撞效果
UIDynamicItemBehavior:动力元素效果
UIPushBehavior:推动效果
UISnapBehavior:迅速移动效果
UIAttachmentBehavior:附着效果

1、添加重力效果

//    动力效果器的类
    UIDynamicAnimator *dynamicAnimator = [[UIDynamicAnimator alloc]initWithReferenceView:self.view];
//    self.view 是它产生动力效果的有效区域
    dynamicAnimator.delegate = self;

//    把之前 添加过的动力效果 移除
    [dynamicAnimator removeAllBehaviors];

//    在view1上 添加动力效果
    UIGravityBehavior *gravity = [[UIGravityBehavior alloc]initWithItems:@[view1]];
//    设置 加速度 数值越大 碰撞效果越大
    gravity.magnitude = 50;
      /*
       sturct CGVector{
       CGFloat dx;  负数向左 正数向右
       CGFloat dy;  负数向上 正数向下

       }
       */
//    设置 动力效果的方向
    gravity.gravityDirection = CGVectorMake(0, 1);

//    添加到效果器 开始动力效果
    [dynamicAnimator addBehavior:gravity];

2、添加碰撞效果
a、单个视图的碰撞效果(边界碰撞)

   UICollisionBehavior *collision = [[UICollisionBehavior alloc]initWithItems:@[view1]];
//    把动力效果器的范围 当做边界
    collision.translatesReferenceBoundsIntoBoundary = YES;

    collision.collisionDelegate = self;

//   添加两个点 画了一条直线 当做边界
//    [collision addBoundaryWithIdentifier:@"line1" fromPoint:CGPointMake(0, 300) toPoint:CGPointMake(400, 600)];
//    [collision addBoundaryWithIdentifier:@"line2" fromPoint:CGPointMake(300, 0) toPoint:CGPointMake(300, 600)];

//    通过贝塞尔曲线 画一个圆形
    UIBezierPath *path = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(0, 200, 200, 200)];
    [collision addBoundaryWithIdentifier:@"circle" forPath:path];

    [dynamicAnimator addBehavior:collision];

b、两个视图碰撞

//   两个视图之间 相互碰撞
    UICollisionBehavior *collision =[[ UICollisionBehavior alloc]initWithItems:@[view1, view2]];
    collision.translatesReferenceBoundsIntoBoundary =YES;

//    如果设置 两个视图的碰撞效果  边界设置则不管用           collision.collisionMode =    UICollisionBehaviorModeEverything;
     collision.collisionDelegate = self;
    [dynamicAnimator addBehavior:collision];

3、动力元素效果

//    可以与其他的 动力效果 配合使用
    UIDynamicItemBehavior *dynamicItem = [[UIDynamicItemBehavior alloc]initWithItems:@[view1, view2]];
//    设置元素的跳跃度(0-1)
    dynamicItem.elasticity = 0.8;
    [dynamicAnimator addBehavior:dynamicItem];

代理方法的使用:

UICollisionBehavior的代理方法

//两个元素相互碰撞
- (void)collisionBehavior:(UICollisionBehavior*)behavior beganContactForItem:(id )item1 withItem:(id )item2 atPoint:(CGPoint)p;
- (void)collisionBehavior:(UICollisionBehavior*)behavior endedContactForItem:(id )item1 withItem:(id )item2;

// 视图碰撞边界的时候 触发
- (void)collisionBehavior:(UICollisionBehavior*)behavior beganContactForItem:(id )item withBoundaryIdentifier:(id )identifier atPoint:(CGPoint)p;
- (void)collisionBehavior:(UICollisionBehavior*)behavior endedContactForItem:(id )item withBoundaryIdentifier:(id )identifier;

重力效果器的代理方法

- (void)dynamicAnimatorWillResume:(UIDynamicAnimator*)animator{

    NSLog(@"启动");
}

- (void)dynamicAnimatorDidPause:(UIDynamicAnimator*)animator{

    NSLog(@"暂停");
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值