CAKeyAnimation动画 练习 拍皮球及弹跳动画

2017-04-12  本文已影响76人  zp秋枫暮霞

创建拍皮球动画

@property (nonatomic,strong)UIImageView *ballImage;
{
    __block NSMutableArray *values;  //存储动画的关键点
    __block  NSMutableArray *funs;   //存储对应关键点的动画方式kCAMediaTimingFunctionEaseIn kCAMediaTimingFunctionEaseOut
}

    __block float ballHeight=self.view.frame.size.height-40-self.ballImage.center.y;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        values=[[NSMutableArray alloc]init];
        funs=[[NSMutableArray alloc]init];
        while (ballHeight>10) { 
            ballHeight=  ballHeight/3*2;  //每次弹起是上次的2/3
            //一个弹跳 kCAMediaTimingFunctionEaseIn kCAMediaTimingFunctionEaseOut
            [values addObject:[NSValue valueWithCGPoint:CGPointMake(100, self.view.frame.size.height-40)]];
            [funs addObject:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]];
            
            
            [values addObject:[NSValue valueWithCGPoint:CGPointMake(100, self.view.frame.size.height-40-ballHeight)]];
            [funs addObject:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]];
            
            
        }

    });

    CAKeyframeAnimation *keyAnimation=[CAKeyframeAnimation animation];
    keyAnimation.keyPath=@"position";   //设置layer动画的属性
    keyAnimation.duration=0.35*values.count; //设置动画的持续时间
    keyAnimation.values=values;       //设置动画的关键点
    keyAnimation.timingFunctions=funs;  //设置动画的类型
    self.ballImage.layer.position=CGPointMake(100, self.view.frame.size.height-40);
    [self.ballImage.layer addAnimation:keyAnimation forKey:nil];

效果展示


QQ20170411-235714.gif

ok完成!

上一篇 下一篇

猜你喜欢

热点阅读