ios之核心动画(一)

核心动画(一)

之前我们已经说过基础动画编程,现在开始进入更强大的核心动画编程。

首先先说Core Animation。

Core Animation是一组非常强大的动画处理API,它能做出非常绚丽的动画效果,在使用它时需要添加QuartzCore.framework和引入对应的框架<QuartzCore/QuartzCore.h>

 

CAAnimation

它是所有动画对象的父类,负责控制动画的持续时间和速度,是抽象类,不能直接使用,需要使用它的子类。

CAAnimation在分类中定义了以下代理方法

  -(void)animationDidStart:(CAAnimation *)anim;

  -(void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag;

 

CAPropertyAnimation

CAAnimation的子类,也是一个抽象类,不能直接使用,需要使用它的两个子类:CABasicAnimationCAKeyframeAnimation.

属性解析:

fromValue:keyPath相应属性的初始值

toValue:keyPath相应属性的结束值

随着动画的进行,在长度为duration的持续时间内,keyPath相应属性的值从fromValue渐渐地变为toValue

如果fillMode=kCAFillModeForwards和removedOnComletion=NO,那么在动画执行完毕后,图层会保持显示动画执行后的状态。但在实质上,图层的属性值还是动画执行前的初始值,并没有真正被改变

 

CABasicAnimation

 

CABasicAnimation*basicAnimation = [CABasicAnimation animationWithKeyPath:@"contensScale"];

    basicAnimation.fromValue = @0.0;

    basicAnimation.toValue = @(image.scale);

 

    //动画执行时间

    basicAnimation.duration = 2;

    //动画重复次数

    basicAnimation.repeatCount = FLT_MAX;

    //运动曲线,速度

    basicAnimation.timingFunction = [CAMediaTimingFunctionfunctionWithName:kCAMediaTimingFunctionLinear];

    //添加动画的实例对象和名称

    [self.view.layer addAnimation:basicAnimation forKey:@"ani_scale"];

       

从上面例子可以看出

     1、核心动画编程实质上是View 和layer 属性做动画

     2、核心动画编程的动画效果产生,实质上改变layer 的某些属性,让其发生形变,已达到app预期效果

   

CALayer

     1.UIView为每个子类,包括其本身都给定了一个 layer 属性

     2. layer 属性的类型是 CALayer 类构造的实例对象

    

     3. CALayer不响应用户交互,而是来做高级动画,即UI增强效果的动画。

     4.那么CALayer可以做哪些事情?

       1>阴影,圆角,带颜色的边框

       2>3D变换

       3>非矩形范围

       4>透明遮罩

       5>多级非线性动画

 

     UIView有`frame`,`bounds`和`center`,`CALayer`对应地叫做`frame`,`bounds`和`position`。

     `frame`代表了图层的外部坐标(也就是在父图层上占据的空间),`bounds`是内部坐标({0, 0}通常是图层的左上角),`position`代表了相对于父图层的锚点`anchorPoint`的位置(大家暂时可以将锚点想象成中心点)

 

//构造layer

    CALayer*sub_layer = [CALayer layer];

    //layer的大小

    sub_layer.frame= CGRectMake(0,0, 30, 30);

    //layer的背景颜色

    sub_layer.backgroundColor= [UIColor blackColor].CGColor;

    //设置锚点

    sub_layer.anchorPoint= CGPointMake(0.5,0.5);

    [aniView.layeraddSublayer:sub_layer];

    

    //设置圆角

    sub_layer.cornerRadius= 3;

    sub_layer.masksToBounds= YES;

   

    //边框

    self.view.layer.borderColor = [UIColorcyanColor].CGColor;

    self.view.layer.borderWidth = 2.0;

   

    阴影

     `shadowOpacity`是一个必须在0.0(不可见)和1.0(完全不透明)之间的浮点数。如果设置为1.0,将会显示一个有轻微模糊的黑色阴影稍微在图层之上;反之,阴影就可以显示在任意图层之下

     `shadowColor`属性控制着阴影的颜色

     `shadowOffset`属性控制着阴影的方向和距离,shadowOffset的默认值是 {0, -3},意即阴影相对于Y轴有3个点的向上位移

     `shadowRadius`属性控制着阴影的模糊度,当它的值是0的时候,阴影就和视图一样有一个非常确定的边界线。当值越来越大的时候,边界线看上去就会越来越模糊和自然

  

   

    aniView.layer.shadowOpacity = 0.5;

   

    aniView.layer.shadowColor = [UIColororangeColor].CGColor;

   

    aniView.layer.shadowOffset = CGSizeMake(13, 10);

   

    aniView.layer.shadowRadius3;

 

 //图层的contents属性

    self.view.layer.contents = (__bridgeid)[UIImageimageNamed:@"5.png"].CGImage;

   

    //改变cotents的属性

   

    /*

     - kCAGravityCenter

     - kCAGravityTop

     - kCAGravityBottom

     - kCAGravityLeft

     - kCAGravityRight

     -kCAGravityTopLeft

     -kCAGravityTopRight

     -kCAGravityBottomLeft

     -kCAGravityBottomRight

     - kCAGravityResize

     -kCAGravityResizeAspect

     -kCAGravityResizeAspectFill

     */

 

    //contentGravitylayer放置位置

    self.view.layer.contentsGravity = kCAGravityCenter;

   

    //contentsRect截取layer的某一部分

//   self.view.layer.contentsRect = CGRectMake(0, 0, 1, 0.9);

   //contentsScale

    self.view.layer.contentsScale = image.scale;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值