再谈帧动画

前面有说过关键帧动画,用来绘制沿着贝赛尔曲线前进的动画,这里要说的东西是values和keyTimes,这两个属性的运用在前面点击按钮摇动后画圆中有体现,但是觉得还是应该单独拉出来再说一下,听名字就知道这是一个分步的动画过程,values和times掌握着动画动的朝向和各步的时间,前面的运用跟贝赛尔曲线结合起来,用了贝赛尔曲线的路径组成一帧一帧的动画,这里是手动设置,先来看怎么让一个按钮点击后摇动,看效果图和代码说话:
再谈帧动画_第1张图片

 UIButton *btn=[UIButton buttonWithType:UIButtonTypeSystem];
    btn.frame=CGRectMake(0, 0, 100, 100);
    btn.center=self.view.center;
    btn.backgroundColor=[UIColor orangeColor];
    [btn addTarget:self action:@selector(clickForShake:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:btn];
- (void)clickForShake:(UIButton *)btn
{
    //帧动画
    CAKeyframeAnimation *animation = [CAKeyframeAnimation animation];
    //动画在x轴方向
    animation.keyPath = @"position.x";
    //表单所到的位置
    animation.values = @[@0,@10,@0,@-10,@0,@10,@0];
    //指定对应步动画发生的时间分数
    animation.keyTimes = @[@0,@(1/6.0),@(2/6.0),@(3/6.0),@(4/6.0),@(5/6.0),@1];
    //动画持续总时间
    animation.duration = 0.5;
    //使 Core Animation 在更新 presentation layer 之前将动画的值添加到 model layer 中去。这使我们能够对所有形式的需要更新的元素重用相同的动画,且无需提前知道它们的位置。因为这个属性从 CAPropertyAnimation 继承,所以你也可以在使用 CABasicAnimation 时使用它。(网上搜来的这句话,说的比较官方,没太懂,但是当设置为NO时,系统找不到当前的x位置,就在x0的地方摇动,效果差太明显,可以运行查看)
    animation.additive = YES;
    [btn.layer addAnimation:animation forKey:@"shake"];  

通过这两个属性可以控制运行的轨迹和运行速度,这样是不是很好玩,注意additive这个BOOL变量,上面有详细描述,一定要认真看下。

你可能感兴趣的:(Core,Animation)