真正强大的核心动画(Core Animation)

Core Animation简路径介

  • Core Animation,中文翻译为核心动画,它是一组非常强大的动画处理API,使用它能做出非常绚丽的动画效果,而且往往是事半功倍,也就是说,使用少量的代码就可以实现非常强大的功能
  • Core Animation可以用在Mac OS X和iOS平台
  • Core Animation的动画执行过程都是在后台操作的,不会堵塞主线程
  • 需要注意的是:Core Animation是直接作用在CALayer上的,并非UIView

Core Animation的使用步骤

  • 如果是Xcode5之前的版本,使用它需要先添加QuartzCore.framework和引入对应的框架<QuartzCore/QuartzCore.h>
  • 开发步骤:
  • 1.首先得有CALayer
  • 2.初始化一个CAAnimation对象,并设置一些动画相关属性
  • 3.通过调用CALayer的addAnimationforKey:方法,增加CAAnimation对象到CALayer中,这样就能开始执行动画
CABasicAnimation动画
//1.生成Core Animation(它当中有很多种)
CABasicAnimation *anim = [CABasicAnimation animation];
//2.设置属性(位置属性)
anim.keyPath = @"position.x";
anim.toValue = @300;

注意:在动画完成的时候会自动删除动画,我们要制止,并且将动画停在前面的一个位置(回到原来的位置叫做后面的位置)

//是否删除动画
anim.removeOnCompletion = NO;
//将动画保存到前面的位置(fillMode枚举属性,点进去看一下)
anim.fillMode = @"forwards";
3.添加动画
[self.redView.layer addAnimation:anim forKey:nil];
  • 第一个属性:你需要添加的动画名称
  • 第二个属性:因为我们以后不止添加一个动画,所以需要给动画一个标识(这里举例子就一个,所以暂时写nil)
CAKeyframeAnimation动画(帧动画)
    //创建动画
    CAKeyframeAnimation *anim = [CAKeyframeAnimation animation];
    //设置动画属性
    anim.keyPath = @"transform.rotation";
    anim.values = @[@(angle2Rad(3)),@(angle2Rad(-3)),@(angle2Rad(3))];
    //设置执行次数
    anim.repeatCount = MAXFLOAT;
    //设置执行间隔
    anim.duration = 0.5;
    //添加动画
    [self.imageV.layer addAnimation:anim forKey:nil];
  • 此动画可以跟随路径移动
    //创建动画
    CAKeyframeAnimation *anim = [CAKeyframeAnimation animation];
    //创建路径
    UIBezierPath *path = [UIBezierPath bezierPath];
    [path moveToPoint:CGPointMake(10, 10)];
    [path addLineToPoint:CGPointMake(10, 200)];
    //设置属性(路径)
    anim.keyPath = @"position";
    anim.path = path.CGPath;
    //设置动画时间
    anim.duration = 2;
    //添加动画
    [self.imageV.layer addAnimation:anim forKey:nil];
CATransition动画(转场动画)
  • 图片的名字从1到3
//转场代码
if (_i==4) {
      _i=1;
  }
    //设置图片
      self.imageV.image = [UIImage imageNamed:[NSString stringWithFormat:@"%d",_i]];
          _i++;
 //转场代码
    //创建转场动画
    CATransition *anim = [CATransition animation];
    //设置动画样式
    anim.type = @"cube";
   //动画时长
    anim.duration =1;
    //添加动画
    [self.imageV.layer addAnimation:anim forKey:nil];

注意:转场动画和转场代码必须在同一个方法中

  • 转场动画过度效果
    1.fade:交叉淡化过渡
    2.push:新
    3.moveIn:新视图移到旧视图上面
    4.reveal:将旧视图移开,显示下面的新视图
    5.cube:立方体翻滚效果
    6.oglFlip:上下左右翻转效果
    7.suckEffect:收缩效果,如一块布被抽走
    8.rippleEffect:水滴效果
    9.pageCurl:向上翻页效果
    10.pageUnCurl:向下翻页效果
    11.cameraIrisHollowOpen:相机镜头打开效果
    12.cameraIrisHollowClose:相机镜头关闭效果
CAAnimationGroup动画(动画组)
//创建两个动画
    //第一个动画
    CABasicAnimation *anim1 = [CABasicAnimation animation];
    //设置anim1的属性
    anim1.keyPath = @"transform.scale";
    anim1.toValue = @0.5;
    //第二个动画
    CABasicAnimation *anim2 = [CABasicAnimation animation];
    //设置属性
    anim2.keyPath = @"position.y";
    anim2.toValue = @300;
    //创建动画组
    CAAnimationGroup *group = [CAAnimationGroup animation];
    //将动画添加到动画组中
    group.animations = @[anim1,anim2];
    //设置动画组的属性(让他不是默认情况并且保持在动画后)
    group.removedOnCompletion = NO;
    group.fillMode = kCAFillModeForwards;
    //添加动画组
    [self.imageV.layer addAnimation:group forKey:nil];
  • 动画组可以在需要给图片多个动画效果的时候添加在一起,之后统一设置动画时长,动画是否默认情况,保持在动画前或者后的效果,避免了写多条重复代码
属性

调用属性的时候一定要是对象.属性

  • 动画执行次数(最大)
repeatCount = MAXFOLAT;
  • 动画间隔时长(3S)
duration = 3;
  • 自动翻转(怎么去,怎么回来)
autoreverses = YES;
  • 动画开始的位置和结束的位置(0到1)
startProgress = 0.2;
endProgress = 0.5;
代理

//动画结束的时候调用

-(void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag{
}
在设置属性keypath的时候可能用到的值
可用 Key Path示意
transform.rotation.x按x轴旋转的弧度
transform.rotation.y按y轴旋转的弧度
transform.rotation.z按z轴旋转的弧度
transform.rotation按z轴旋转的弧度, 和transform.rotation.z效果一样
transform.scale.x在x轴按比例放大缩小
transform.scale.y在y轴按比例放大缩小
transform.scale.z在z轴按比例放大缩小
transform.scale整体按比例放大缩小
transform.translation.x沿x轴平移
transform.translation.y沿y轴平移
transform.translation.z沿z轴平移
transform.translationx,y 坐标均发生改变
transformCATransform3D 4xbounds4矩阵
boundslayer大小
positionlayer位置
anchorPoint锚点位置
cornerRadius圆角大小
zPositionz轴位置
删除动画
[self.dotLayer removeAllAnimations];
删除路径
[self.path removeAllPoints];
  • 注意:通过transform进行的形变,他修改的是frame,并没有修改他的center(中心)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

iOS开发疯狂者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值