核心动画

核心动画是一套包含图形绘制,投影,动画的 Objective–C 类集合。

核心动画的三块主要内容:

1.图层calayer

每一个view都默认有一个layer对象,用来显示视图。通过设置layer的一些属性可以改变一些layer视图的一些变化。

layer的一些属性:

    _imageBack.layer.cornerRadius = 10;//设置圆角
    _imageBack.layer.masksToBounds = YES;//遮盖layer层下的所有layer
    _imageBack.layer.borderWidth = 5;//设置边框宽度
    _imageBack.layer.borderColor = [[UIColor orangeColor]CGColor];//设置边框颜色
    注意:设置masksToBounds后会将shadow给遮盖,解决方法是,建立为一个SubLayer
    UIView *_view = [[UIView alloc]initWithFrame:_imageBack.frame];
    [self.view addSubview:_view];
    _view.layer.shadowColor = [[UIColor blueColor]CGColor];//设置阴影颜色
    _view.layer.shadowOffset = CGSizeMake(10, 10);//设置阴影偏移量
    _view.layer.shadowOpacity = 0.5;//设置阴影透明度
    _view.layer.shadowRadius = 4;//设置阴影半径
    [_view addSubview:_imageBack];//将图片视图添加到view中
//    _imageBack.layer.contents = (id)[[UIImage imageNamed:@"xxxx"]CGImage];//可以在layer中设置图片

效果图:

除此之外,还有一些其他的属性:

mask--遮罩属性

opacity--透明度

compositingfilter--混合属性

filters--滤镜属性

backgroundcolor和backgroundfilters--图层背景属性

图层的所有几何属性:

frame  bounds  position  anchorpoint  cornerradius  transform  zposition

2.动画类caanimation:主要有三类

1)cabasicanimation   基础动画:提供了在图层属性值之间简单的插入

2)cakeyframeanimation    关键帧动画:你指定动画的一个图层属性的关键路径,一个表示在动画的每个阶段的价值的数组,还有一个关键帧时间 的数组和时间函数。caanimationgroup   动画组

3)catransition   转场动画:提供了一个影响整个图层的内容过渡效果。如淡出,推出等。

隐式动画:使所有动画属性的变化是渐近的和异步的。通过直接改变动画图层的属性来实现。

_layer.position=CGPointMake(500.0,500.0); 

显示动画:创建一个动画对象,设置开始和结束的值。

显示动画的一些keypath

rotation.x  沿x轴旋转  rotation.y   rotation.z  rotation

scale.x    沿x轴放大   scale.y  scale.z   scale

translation.x  沿x轴转场  translation.y  translation.z   translation

3.事务类catransaction

图层的每一个改变都是事务的一部分。

显示动画实例:
设置视图的scale和opacity两个属性来实现视图的放大缩小

 CABasicAnimation *basic = [CABasicAnimation animationWithKeyPath:@"transform.scale"];//初始化视图和设置动画key
    basic.fromValue = [NSNumber numberWithFloat:1.0];//设置起始值
    basic.toValue = [NSNumber numberWithFloat:1.5];//设置中制值
    basic.autoreverses = YES;//在结束点后重新回到初始点
    basic.repeatCount = MAXFLOAT;//设置重复次数
    basic.duration = 2.0;//设置持续时间
    
    CABasicAnimation *opacity = [CABasicAnimation animationWithKeyPath:@"opacity"];
    opacity.fromValue = [NSNumber numberWithFloat:0.0];
    opacity.toValue = [NSNumber numberWithFloat:1.0];
    opacity.autoreverses = YES;
    opacity.duration = 2.0;
    opacity.repeatCount = MAXFLOAT;
    
    [_imageBack.layer addAnimation:opacity forKey:@"opacity"];
    [_imageBack.layer addAnimation:basic forKey:@"scale"];//添加视图

效果图:

关键帧动画:

CAKeyframeAnimation *keyAnimate = [CAKeyframeAnimation animationWithKeyPath:@"position"];//初始化帧动画,并动画的key
    NSValue *value0 = [NSValue valueWithCGPoint:_imageBack.layer.position];
    NSValue *value1 = [NSValue valueWithCGPoint:CGPointMake(_imageBack.layer.position.x, _imageBack.layer.position.y+100)];
    NSValue *value2 = [NSValue valueWithCGPoint:CGPointMake(_imageBack.layer.position.x +100, _imageBack.layer.position.y + 100)];
    NSValue *value3 = [NSValue valueWithCGPoint:CGPointMake(_imageBack.layer.position.x + 100, _imageBack.layer.position.y)];
    NSValue *value4 = [NSValue valueWithCGPoint:_imageBack.layer.position];
    keyAnimate.values = @[value0,value1,value2,value3,value4];//设置帧动画的关键帧位置
    keyAnimate.duration = 2.0;
    keyAnimate.repeatCount = MAXFLOAT;
    keyAnimate.keyTimes = @[@0.0,@0.5,@0.6,@0.7,@0.9];//设置管见证在移动过程中的移动时间
//    CAMediaTimingFunction *tf0 = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];//设置每一段的时间曲线
//    keyAnimate.timingFunctions = @[tf0];//添加时间曲线
    
    [_imageBack.layer addAnimation:keyAnimate forKey:@"keyAnimate"];//添加动画到视图

效果图:

原文地址:https://www.cnblogs.com/moxuexiaotong/p/4965916.html