CALayer核心动画

核心动画

 CoreAnimation(框架名)

 CALayer(图层,用来展示)

 |

 CAAnimation(处理动画的类,不能直接使用是一个基类)

 |

 CAPropertyAnimation(属性动画,通过属性值改变,产生动画效果基类)

 |    CAAnimationGroup(群组动画,可以同时添加多种动画,达到预期效果)

 |    CATransition(转场动画,给视图切换的时候添加动画效果)

 |

 CABasicAnimation(基础动画只能是;两个点之间的变化)

 |     CAKeyframeAnimation(关键帧动画,可以添加多个点或者路径)

 CASpringAnimation:弹簧动画

 

 UIViewCALayer的区别

 UIView:可以跟用户交互

 CALayer:不可以通用户交互,只能显示内容

 UIView->rootLayer发生改变,自图层也会发生改变

 CALayer:发生改变自图层不会发生改变

 button不只有一个视图,只是改变了其中一个视图rootLayer——>显示,未被裁切的边框

 CALayer本身自带动画效果(当改变属性值得时候)->隐式动画

 rootLayer:没有动画效果

 

 可以有隐式动画的效果的属性

 bounds 边境范围

 position 中心点类似于UIView中的center

 zPosition z轴中心点

 anchorPoint 锚点 ✮✮✮✮✮

 anchorPointZ Z轴锚点

 transform 转换形态

 frame NO. Animatable 坐标

 hidden 隐藏

 doubleSided 图层背面是否显示

 geometryFlipped 翻转颠倒

 masksToBounds 裁切边境

 contents 内容

 opaque 不透明度

 allowsEdgeAntialiasing 是否使用变形后的抗锯齿

 backgroundColor 背景颜色

 borderWidth 边框宽

 borderColor 边框颜色

 opacity 不透明度

 shadowColor 阴影颜色

 shadowOpacity 阴影不透明度

 rasterizationScale 防止Retina屏幕像素化

 shadowOffset 阴影偏移量

 shadowRadius 阴影的半径

#import "ViewController.h"

#define Angle(a) (a)*M_PI/180

//每秒旋转多少度

//旋转的弧度:sAngle*N*M_PI/180

#define sAngle 6

@interface ViewController ()

{

    CALayer *layer;   

}

@property(nonatomic,strong)CALayer *pointerLayer;

@end

@implementation ViewController

- (void)viewDidLoad {

    [superviewDidLoad];

    /*

//CALayer的初始化

//    CALayer *layer = [[CALayer alloc] init];

    layer = [CALayer layer];

//    添加到父图层上可以是addSubstringLayer

    layer.frame = CGRectMake(100, 100, 100, 100);

    layer.backgroundColor = [[UIColor cyanColor] CGColor];

    [self.view.layer addSublayer:layer];

    

//    图层不能跟用户交互,不能添加响应时间

    */

//    NSLog(@"%@",self.pointerLayer);

   

    self.pointerLayer.anchorPoint =CGPointMake(0.5,0.9);

      /*

       图层需要的颜色(CGColorRef)或者是图片(CGImageRef)都是CG类型

       */

    self.pointerLayer.contents = (id)[UIImageimageNamed:@"shizhen"].CGImage;

    [selfstart];

    [NSTimerscheduledTimerWithTimeInterval:1target:selfselector:@selector(start)userInfo:nilrepeats:YES];

}

- (void)start{

//NSCalendar日历类可以通过日历类,获得年月日时分秒

//NSDateComponents组件

    NSCalendar *calendar = [NSCalendarcurrentCalendar];

//    fromDate获得那个日期的组件

    NSDateComponents *components = [calendarcomponents:NSCalendarUnitHour|NSCalendarUnitMinute|NSCalendarUnitSecondfromDate:[NSDatedate]];

    float s = components.second *sAngle;

//    将秒装换成弧度

    self.pointerLayer.transformCATransform3DMakeRotation(Angle(s),0, 0,1);

}

- (CALayer *)pointerLayer{

    if (_pointerLayer) {

        return_pointerLayer;

    }

    _pointerLayer = [CALayerlayer];

    _pointerLayer.bounds =CGRectMake(0,0, 29,236 );

    _pointerLayer.position =self.view.center;

    

//    _pointerLayer.backgroundColor = [[UIColor orangeColor] CGColor];

    [self.view.layeraddSublayer:_pointerLayer];

    return_pointerLayer;

}


- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{

//    UITouch *touch  = [touches anyObject];

//    layer.position = [touch locationInView:self.view];

//   

//    CGFloat width = CGRectGetWidth(layer.bounds) != 50 ? 50:100;

//    layer.bounds = CGRectMake(0, 0, width, width);

//   CGColorRef color = [UIColor brownColor].CGColor != layer.backgroundColor ? [UIColor colorWithRed:0.847 green:0.122 blue:0.868 alpha:1.000].CGColor:[UIColor colorWithRed:0.278 green:1.000 blue:0.027 alpha:1.000].CGColor;

//    

//    layer.backgroundColor = color;

//    layer.shadowRadius = 10;

//    layer.shadowOpacity = 30.0;

    设置图层圆角的半径

    layer.cornerRadius = 40 ;

//    layer.cornerRadius = layer.cornerRadius != 50 ? 50:0;

//    layer.opacity = 0.25;

    

//    锚点

//    锚点的最大值是1,1,最小值是0,0

//    默认锚点是于中心点重合的默认值是0.50.5

//    设置旋转属性

    /*

    当试图改变的时候,是以锚点为基准去改变的

    锚点的值与位置

     00在图层的左上角

     01在左下角

     10在右上角

     11在右下角

     

     锚点位置的计算公式

     锚点 =锚点在视图上的位置.x.y/视图的宽高     

     锚点值 =锚点在视图上的位置.x.y/视图的宽高

    */

    self.pointerLayer.transform = CATransform3DMakeRotation(Angle(90),0, 0,1);   

}

- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{

//    layer.opacity = 1.0;

    self.pointerLayer.transform = CATransform3DIdentity;

}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值