1.什么是核心动画?

核心动画——CAAnimation,采用了CAMediaTiming协议,可以调整时间,包括持续时间,速度,重复次数;采用了CAAction协议,可以通过响应动作的方式来显示动画,CAAnimation又分为隐式动画和显示动画。

CAAnimation的一些派生类:

CAPropertyAnimation:属性动画,通过改变属性值产生动画效果

  <1>CABasicAnimation:基础动画,只能是两个点之间的变化 提供了对单一动画的实现

     CASpringAnimation:弹簧动画 (弹动效果)

  <2>CAKeyframeAnimation:关键帧动画, 可以添加多个点的变化或者添加路径可以定义行动路线

CAAnimationGroup:动画组,可以同时添加多种动画达到预期效果

CATransition:转场动画, 给视图切换的时候添加动画效

下面给大家画一个结构图,可以让大家更容易的了解

CALayer:图层 隐式动画

UIView:视图 可以跟用户交互,rootLayer 发生改变子图层也会发生改变,rootLayer没有动画效果

CALayer: 不可以跟用户交互 只能显示内容,当发生改变子图层不会跟随发生改变,本身自带动画效果(改变属性效果的时候),属于隐式动画

CALayer可以设置的属性

@property CGRect bounds;边境范围

@property CGPoint position;中心点

 @property CGFloat zPosition;z轴中心点

@property CGPoint anchorPoint;anchorPoint 锚点  

@property CGFloat anchorPointZ;Z轴锚点

@property CATransform3D transform;转换形态

@property CGRect frame;NO. Animatable 坐标

@property(getter=isHidden) BOOL hidden;隐藏

@property(getter=isDoubleSided) BOOL doubleSided;图层背面是否显示

@property(getter=isGeometryFlipped) BOOL geometryFlipped;翻转 颠倒

@property BOOL masksToBounds;裁切边境

@property(nullable, strong) id contents;内容

@property(getter=isOpaque) BOOL opaque;不透明度

@property BOOL allowsEdgeAntialiasing;是否使用 变形后的抗锯齿

@property(nullable) CGColorRef backgroundColor;背景颜色

@property CGFloat borderWidth;边框宽

@property(nullable) CGColorRef borderColor;边框颜色

@property float opacity;不透明度

@property(nullable) CGColorRef shadowColor;阴影颜色

@property float shadowOpacity;阴影不透明度

@property CGFloat rasterizationScale;防止Retina屏幕像素化

@property CGSize shadowOffset;阴影偏移量

@property CGFloat shadowRadius;阴影的半径

✮✮锚点的最大值是1,1 最小值是0,0 默认值是0.5,0.5当视图改变的时候是以锚点为基点去改变的

锚点的值与位置

  0,0 = 在图层的左上角

  0,1 = 图层的左下角

  1,0 = 图层的右上角

  1,1 = 在图层的右下角

锚点的计算公式:锚点值 = 锚点在视图上的位置.x.y/视图的宽高

下面就钟表为例介绍一下核心动画:

#import "ViewController.h"#define Angle(a) (a)*M_PI/180
#define SAngle 6 //每秒旋转多少度@interface ViewController ()
{CALayer *layer;float s;
}@property(nonatomic,strong)CALayer *pointLayer;
@property(nonatomic,strong)CALayer *minuteLayer;
@property(nonatomic,strong)CALayer *SecondtLayer;@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];//**图层不能跟用户交互,不能添加响应事件//初始化CALayer  addSubLayer:添加到父图层的方法/*layer = [CALayer layer];layer.frame = CGRectMake(0, 0, 100, 100);layer.cornerRadius = 50;layer.backgroundColor = [UIColor yellowColor].CGColor;[self.view.layer addSublayer:layer];*/UIImageView *image = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.width)];image.image = [UIImage imageNamed:@"biaopan"];image.contentMode = UIViewContentModeScaleAspectFit;image.center = self.view.center;[self.view addSubview:image];self.SecondtLayer.anchorPoint = CGPointMake(0.5, 0.9);self.SecondtLayer.contents = (id)[UIImage imageNamed:@"miaozhen"].CGImage;self.minuteLayer.anchorPoint = CGPointMake(0.5, 0.9);self.minuteLayer.contents = (id)[UIImage imageNamed:@"fenzhen"].CGImage;self.pointLayer.anchorPoint = CGPointMake(0.5, 0.9);//图层上要的是颜色CGColorRef 图片CGImageRefself.pointLayer.contents = (id)[UIImage imageNamed:@"shizhen"].CGImage;[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(start) userInfo:nil repeats:YES];
}- (void)start{//日历的一个类NSCalendar 获得年月日时分秒//NSDateComponents 组件
    NSCalendar *calendar = [NSCalendar currentCalendar];///(NSCalendarUnit)需要的组件  获得哪个日期的组件NSDateComponents *component = [calendar components:NSCalendarUnitHour|NSCalendarUnitMinute|NSCalendarUnitSecond fromDate:[NSDate date]];s = component.second*SAngle;self.SecondtLayer.transform = CATransform3DMakeRotation(Angle(s),0, 0, 1);self.SecondtLayer.anchorPoint = CGPointMake(0.5, 0.9);self.SecondtLayer.contents = (id)[UIImage imageNamed:@"miaozhen"].CGImage;float m = component.minute*SAngle;self.minuteLayer.transform = CATransform3DMakeRotation(Angle(m),0, 0, 1);self.minuteLayer.anchorPoint = CGPointMake(0.5, 0.9);self.minuteLayer.contents = (id)[UIImage imageNamed:@"fenzhen"].CGImage;float h = component.hour*SAngle;self.pointLayer.transform = CATransform3DMakeRotation(Angle(h), 0, 0, 1);self.pointLayer.anchorPoint = CGPointMake(0.5, 0.9);self.pointLayer.contents = (id)[UIImage imageNamed:@"shizhen"].CGImage;
}- (CALayer *)pointLayer{if (_pointLayer) {return _pointLayer;}_pointLayer = [CALayer layer];_pointLayer.bounds = CGRectMake(0, 0, 29, 200);_pointLayer.position = self.view.center;[self.view.layer addSublayer:_pointLayer];return _pointLayer;
}- (CALayer *)minuteLayer{if (_minuteLayer) {return _minuteLayer;}_minuteLayer = [CALayer layer];_minuteLayer.bounds = CGRectMake(0, 0, 21, 210);_minuteLayer.position = self.view.center;[self.view.layer addSublayer:_minuteLayer];return _minuteLayer;
}- (CALayer *)SecondtLayer{if (_SecondtLayer) {return _SecondtLayer;}_SecondtLayer = [CALayer layer];_SecondtLayer.bounds = CGRectMake(0, 0, 21, 230);_SecondtLayer.position = self.view.center;[self.view.layer addSublayer:_SecondtLayer];return _SecondtLayer;
}- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{/*UITouch *touch = [touches anyObject];layer.position = [touch locationInView:self.view];CGFloat width = CGRectGetWidth(layer.bounds)!= 100?100:25;layer.bounds = CGRectMake(0, 0, width, width);CGColorRef color = [UIColor lightGrayColor].CGColor != layer.backgroundColor?[UIColor lightGrayColor].CGColor:[UIColor yellowColor].CGColor;layer.backgroundColor = color;layer.shadowColor = [UIColor blackColor].CGColor;layer.geometryFlipped = YES;layer.cornerRadius = layer.cornerRadius != 50?50:0;//图层的透明度layer.opacity = 0;*///緢点self.SecondtLayer.transform = CATransform3DMakeRotation(Angle(Angle(60)), 0, 0, 1);self.minuteLayer.transform = CATransform3DMakeRotation(Angle(s/60), 0, 0, 1);self.pointLayer.transform = CATransform3DMakeRotation(Angle(s/360), 0, 0, 1);}- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{//layer.opacity = 1;self.pointLayer.transform = CATransform3DIdentity;}@end

效果如下:

转载于:https://www.cnblogs.com/chengy134/p/5396181.html

核心动画——CAAnimation相关推荐

  1. iOS动画专题·UIView二维形变动画与CAAnimation核心动画

    点击上方"iOS开发",选择"置顶公众号" 关键时刻,第一时间送达! 1. iOS动画 总的来说,从涉及类的形式来看,iOS动画有:基于UIView的仿射形变动 ...

  2. iOS 动画专题(UIView二维形变动画与CAAnimation核心动画)

    文章目录 1. iOS动画 2. UIView动画 2.1 设置UIView动画的两种语法形式 2.2 设置属性形变动画的两种类型 2.3 与动画相关的属性 2.3.1 UIView与动画相关的属性- ...

  3. iOS开发UI篇—核心动画简介

    一.简单介绍 Core Animation,中文翻译为核心动画,它是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍.也就是说,使用少量的代码就可以实现非常强大的功能. ...

  4. iOS核心动画之CoreAnimation

    本文目录 一.Core Animation简介 二.Core Animation的使用步骤 三.CAAnimation 四.CAPropertyAnimation 回到顶部 一.Core Animat ...

  5. iOS - Core Animation 核心动画

    1.UIView 动画 具体讲解见 iOS - UIView 动画 2.UIImageView 动画 具体讲解见 iOS - UIImageView 动画 3.CADisplayLink 定时器 具体 ...

  6. iOS开发UI篇—核心动画(基础动画)

    一.简单介绍 CAPropertyAnimation的子类 属性解析: fromValue:keyPath相应属性的初始值 toValue:keyPath相应属性的结束值 随着动画的进行,在长度为du ...

  7. Core Animation(核心动画)

    iOS开发UI篇-核心动画简介 一.简单介绍 Core Animation,中文翻译为核心动画,它是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍.也就是说,使用少量 ...

  8. iOS 核心动画 Core Animation浅谈

    代码地址如下: http://www.demodashi.com/demo/11603.html 前记 关于实现一个iOS动画,如果简单的,我们可以直接调用UIView的代码块来实现,虽然使用UIVi ...

  9. iOS开发UI篇—核心动画(UIView封装动画)

    一.UIView动画(首尾) 1.简单说明 UIKit直接将动画集成到UIView类中,当内部的一些属性发生改变时,UIView将为这些改变提供动画支持 执行动画所需要的工作由UIView类自动完成, ...

最新文章

  1. 脑科学开放日举行,张钹等专家:下一代AI创新要结合脑科学研究
  2. 反函数的导数:理论与应用
  3. java quartz 触发_手动触发Quartz作业
  4. 平切分,分库,分表,主从,集群 数据库水平切分的实现原理解析
  5. 微课|玩转Python轻松过二级(1.1节):Python命令式编程与函数式编程模式
  6. 如何运行网页html,如何在网页中运行html代码
  7. 很实用的一个ext表格,具有很好的分页功能。
  8. linux运维常见英文报错中文翻译(菜鸟必知)
  9. 网络安全笔记-DDoS攻击
  10. 机器学习基础 集成学习进阶(XGBoost+LightGBM)
  11. python+pillow不规则图片合成合并
  12. python开源项目贡献_为开源项目做出第一笔贡献
  13. 计算机教室架构,物联网智慧教室架构
  14. hive时空链战_时空链战Chain Strike游戏电脑版下载_时空链战Chain Strike最新电脑版下载_18183手机游戏下载...
  15. 邮箱投递简历,如何正确书写正文和主题?
  16. 交互设计:界面尺寸设计大全
  17. 深度科普:神经网络的类型及其作用
  18. JS 取半年或一年后的时间
  19. 激光打标机不锈钢快速打黑参数
  20. 2014网络热门词汇_2014年的10个网络预测

热门文章

  1. 旷视孙剑团队提出AutoML神经架构搜索新方法:单路径One-Shot,更精确更省时
  2. 机器学习算法太厉害,导致人类也通不过谷歌验证码
  3. 最强NLP模型BERT喜迎PyTorch版!谷歌官方推荐,也会支持中文
  4. NLG ≠ 机器写作 | 专家专栏
  5. “让天下没有难开的店”,宣言来自无人车公司AutoX
  6. 小米开源移动端深度学习框架MACE,自主研发,专为IoT设备优化
  7. 微软CEO:别被Google的TPU诱惑,Kinect“复活” | Build 2018
  8. 毕啸南专栏 | 对话驭势CEO吴甘沙:无人车结盟竞争是大势所趋
  9. 超火的漫画线稿上色AI出新版了!无监督训练,效果更美好 | 代码+Demo
  10. Windows下使用python库 curses遇到错误消息的解决方案 1