CAAnimation——基本动画,关键帧动画和贝塞尔路径

iOS动画学习笔记 从易到难分为三个方面CABasicAnimation,UIBezierPath,CAShapeLayer 从CABasicAnimation开始 这个部分也有三个概念CALayer、CAAnimation、CAAnimationGroup CALayer 在最开始学习iOS开发很长的一段时间都只在与view对对碰,只会在很少的角落里看到layer的字眼,所以对于layer的首要问题是,他和view有什么关系 来自苹果官方文档 Layers provide infrastructure for your v 阅读详情

概述


在做对于图层的动画效果时,往往直接改变属性或者使用隐式动画是不能满足我们的需求的,所以我们就用到了显式动画,CAAnimation。它可以管理重复动画、准确的控制时间和步调,并且能设定图层过渡。当然,所有隐式动画能做到的,显式动画也都能做到。

来看下CAAnimation的继承体系



CABasicAnimation


- (void)demoViewBasicAnimation
{
    CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"];
    
    animation.fromValue = [NSValue valueWithCGPoint:CGPointMake(_demoView.center.x, _demoView.center.y)];  //可以省略...
    animation.toValue = [NSValue valueWithCGPoint:CGPointMake(270, 410)];
    animation.duration = 3.0f;
    animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];    //动画速度设置
    
    [_demoView.layer addAnimation:animation forKey:nil];
}

编译运行,会发现动画在执行后demoView回到了起点,这里需要对动画的两个属性进行设置,让图层在完成动画后停留在动画后的状态。

......    

   animation.fillMode = kCAFillModeForwards;
   animation.removedOnCompletion = NO;

......

加入这两行代码后就简单的完成了位移动画

注意这里填写的keyPath是一个NSString类型的字符串,这是系统封装好的键路径,2维常用的主要有 transform opacity position等。

在CAAnimation中可以实现代理方法
- animationDidStart:
- animationDidStop:finished:
分别对应刚启动时的状态和完成后的状态

在addAnimation:forKey:方法中,也可以给这个动画设置一个键,可以在其他地方将其取出来,进行一些操作,比如删除。这也充分体现了kvc的灵活。
用到CALayer的 removeAnimationForKey:方法。

CAKeyframeAnimation


如果是简单的动画CABasicAnimation就能完成,CAKeyframeAnimation(关键帧动画)弥补了基本动画只能传入一对对应值的不足,关键帧动画支持传入一套数值或一个路径来完成动画。

- (void)demoViewKeyframeAnimation
{
    _demoView.layer.anchorPoint = CGPointMake(0.5, 0.0);
    CAKeyframeAnimation *animaiton = [CAKeyframeAnimation animationWithKeyPath:@"transform.rotation"];
    
    NSArray *rotationVelues = @[@(M_PI_4), @(-M_PI_4), @(M_PI_4)];
    animaiton.values = rotationVelues;
    animaiton.duration = 3.0f;
    animaiton.repeatCount = HUGE_VALF;      //    #define    HUGE_VALF    1e50f
    
    [_demoView.layer addAnimation:animaiton forKey:nil];
}

编译运行后可以发现demoView像一个钟摆一样不停摇晃,如果想效果更逼真,可以使用连续动画配合timingFunction来实现。

动画添加贝塞尔路径


- (void)demoViewBezierPathAnimation
{
    UIBezierPath *path = [UIBezierPath bezierPath];
    [path moveToPoint:_demoView.center];    //一定要设置 不然底层的CGPathRef找不到起始点,将会崩溃
    [path addCurveToPoint:CGPointMake(270, 410) controlPoint1:CGPointMake(0, Screen_Height) controlPoint2:CGPointMake(Screen_Width, 0)];    //以左下角和右上角为控制点
    
    CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
    animation.path = path.CGPath;
    animation.duration = 3.0f;
    animation.removedOnCompletion = NO;
    animation.fillMode = kCAFillModeForwards;
    
    [_demoView.layer addAnimation:animation forKey:nil];
}

设置了一个贝塞尔路径,赋给动画的路径属性,两个控制点为左下以及右上

Demo源码 点击打开链接




以上为本篇博客全部内容,欢迎指正和交流。转载请注明出处~
CAAnimation 这个demo主要实现了,单个动画的移动,缩放,翻转,以及将这些动画组合起来的效果 立即下载

相关推荐

核心动画demo

核心动画中基本动画,关键帧,贝塞尔路径的使用。

iOS CAAnimation使用详解

理解了隐式动画后,显式动画就更加通俗易懂了。区别于隐式动画的特点,显式动画就是需要我们明确指定类型、时间等参数来实现效果的动画。除此之外,我们也可以创建非线性动画,比如沿着任意一条曲线运动等; 我们平时最常用的也是显式动画,不仅系统为我们的视图提供了UIViewAnimationWithBlock的动画封装,而且我们在熟悉了Core Animation的动画属性后也可以很方便的设置显式动画; 一、动画的分类 1、实现动画的方式 如果根据实现动画时直接操作对象的类型,我们可以简单的将动画分为视图和图层两种;但

假装你是大灰狼的专栏 1485

Directx关键帧动画

开发工具: Microsoft Visual Studio 2005 Microsoft DirectX 9.0 SDK Update

iOS 动画篇 - CAAnimation初识

CAAnimation 是一个抽象动画类,无法直接使用,需要使用它的子类,动画分为两大类:属性动画和转场动画。属性动画顾名思义,针对图层可动画属性进行动画,转场动画通常用于视图切换,例如A视图切换为B视图。CAAnimation 针对的是图层而非视图,因此默认情况下,它在完成动画后恢复到最初状态,且不会改变视图的相关属性。

LOLITA0164的博客 1万+

Oracle数据库安装图文教程 附百度云oracle Database 11g 安装包

一,Oracle数据库安装包下载 1.从Oracle官网下载所需的数据库安装包【下载需要注册登录Oracle账户】     http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html 2.此处有下载好的Oracle Database 11g Release 2  百度云网盘  提取码:z...

向来如此,就一定是对的吗 6万+

高效IT运维报告编写指南:实战经验与模板分享

本文提供了一份全面的IT运维报告编写指南,涵盖实战经验与实用模板分享。文章详细解析了高效运维报告的核心要素,包括结构设计、数据收集自动化和可视化技巧,并提供了月度报告和故障分析报告模板。通过自动化工具和写作技巧,帮助团队提升报告质量,支持决策和问题追踪。

u5v6w7的博客 927

iOS动画之CAAnimation

iOS动画之CAAnimation,也就是CABasicAnimation、CAKeyframeAnimation、CAAnimationGroup或CATransition的父类

YouAreUmbrella的博客 1021

SAP 更改物料基本计量单位

创建订单单位后,新创建的采购申请、采购合同、采购信息记录均会使用新的订单单位

matinal 當冬夜漸暖 。公众号:matinal 6162

iOS - CAAnimation动画集合

QuartzCore框架下CAAnimation以及UIViewAnimation的动画集合:移动、旋转、缩放、弹簧、组合动画以及各种转场效果、漂移动画和常见动画示例。

chaneylauok的博客 461

【Office激活】学校正版Office已激活成功仍弹出激活窗口

学校正版Office激活问题:已激活成功仍弹出激活窗口

ESCM_的博客 1万+

MobaXterm隧道配置详解:为PyCharm远程开发打通‘最后一公里’

本文详细解析了如何利用MobaXterm配置SSH隧道,实现PyCharm远程开发的高效连接。通过本地端口转发技术,开发者可以安全访问内网服务器,特别适用于需要通过跳板机的复杂网络环境。文章涵盖从基础配置到企业级运维的全套解决方案,包括性能优化、安全加固等实用技巧。

weixin_30566063的博客 503

iOS CAAnimation核心动画

##前言 Core Animation核心动画主要是采用CAAnimation抽象超级类的子类实现动画,它是一组非常强大的动画处理API.使用它能做出非常绚丽的动画效果.Core Animation可以用在Mac OS X和iOS平台. Core Animation的动画执行过程是在后台操作的.不会阻塞主线程.要注意的是, Core Animation是直接作用在CALayer上的.并非UIVie...

Future_One的专栏 917

SAP 发货在途库存管理:POD确认差异下的2种后续调整方案对比

本文详细解析了SAP发货在途库存管理中POD确认差异后的财务调整方案,对比了移动类型417和555 T两种处理方式的适用场景及财务影响。通过实际案例说明如何优化POD流程,减少库存差异损失,提升供应链管理效率。特别适合SAP SD模块用户及供应链管理人员参考。

chiman6219的博客 394

iOS Animation讲解

CAAnimation:核心动画的基础类,不能直接使用,负责动画运行时间,速度控制,本身实现了CAMediaTiming协议 CAPropertyAnimation:属性动画的基类(通过属性进行动画设置,是可动画属性),不能直接使用 CAAnimationGroup:动画组,动画组是一种组合设计模式,可以通过动画组来进行所有动画行为的统一控制,组中所有动画效果可以并发执行, CATransi

liuzhiwei_051512的专栏 542

TIBCO Jaspersoft Studio报表开发 使用教程-进阶版

本文学习内容容器定制二级目录三级目录 容器定制 二级目录 三级目录

吉哲的博客 7521

用 Python 和 XGBoost 进行疾病诊断预测

疾病诊断预测是医疗领域的重要研究方向,准确的疾病诊断预测可以帮助医生提前制定治疗方案,提高治疗效果,降低医疗成本。本文章的目的是介绍如何使用 Python 和 XGBoost 算法构建疾病诊断预测模型。范围涵盖了从数据预处理、模型训练到模型评估的整个流程,同时通过实际案例展示如何将该模型应用于疾病诊断预测中。本文首先介绍了疾病诊断预测的背景和 XGBoost 算法的核心概念,然后详细讲解了 XGBoost 算法的原理和具体操作步骤,包括 Python 代码实现。

AI Python 编程之道的博客 1064

[转]iOS动画专题·UIView二维形变动画与CAAnimation核心动画(transform动画,基础,关键帧,组动画,路径动画,贝塞尔曲线)...

1. iOS动画 总的来说,从涉及类的形式来看,iOS动画有:基于UIView的仿射形变动画,基于CAAnimation及其子类的动画,基于CG的动画。这篇文章着重总结前两种动画。 2. UIView动画 设置UIView形变动画有两种常见用到的属性,.frame,.transform,所以有的人也可以分别称之为: ① frame动画 ② transform动画 ...

249

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

ios开发 方形到圆的动画_iOS利用UIBezierPath + CAAnimation实现路径动画效果

前言上次给大家介绍了iOS利用UIBezierPath + CAAnimation实现路径动画效果的相关内容,今天实现一个根据心跳路径实现一个路径动画,让某一视图沿着路径进行运动.。效果图如下:核心代码1-首先通过 drawRect 绘制心形路径- (void)drawRect:(CGRect)rect {// Drawing code// 初始化UIBezierPathUIBezierPath ...

weixin_29214691的博客 291

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Cheetah vs UIView.animate vs CAAnimation:iOS动画方案如何选?一文讲透3种方案优劣

做 iOS 开发时,**UIView.animate、CAAnimation 和 Cheetah** 是三种最常见的动画实现方案,选错方案往往意味着返工。本文结合开源动画库 **Cheetah**(一个用 Swift 编写、基于 CADisplayLink 运行循环的 iOS 轻量动画工具)的源码实现,帮新手和普通开发者快速搞懂三种 iOS 动画方案的原理、优劣与适用场景,让你在面对"按钮点击动效

gitblog_00756的博客 956

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

iOS动画专题·UIView二维形变动画与CAAnimation核心动画(transform动画,基础,关键帧,组动画,路径动画,贝塞尔曲线)...

1. iOS动画 总的来说,从涉及类的形式来看,iOS动画有:基于UIView的仿射形变动画,基于CAAnimation及其子类的动画,基于CG的动画。这篇文章着重总结前两种动画。 2. UIView动画 设置UIView形变动画有两种常见用到的属性,.frame,.transform,所以有的人也可以分别称之为: ① frame动画 ② transform动画 这两种动画只需要在动画语法中适...

weixin_33772645的博客 313

核心动画--关键帧动画

#pragma mark - 动画代理方法 - (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag { // 取出动画类型 NSString *type = [anim valueForKey:@"animationType"]; if ([type isEqualToStr...

weixin_30823683的博客 148

组合动画CAAnimationGroup

先在自定义的ViewController里声明定义一个UIImageView 1 @property (nonatomic,retain) UIImageView *imgView; 1 @synthesize imgView; 在viewDidLoad函数里添加图片,并执行组合动画 1    //添加图片 2 imgView = [[UIImage...

aa631555244的博客 241

iOS开发CAAnimation类动画, CATransition动画

#pragma mark - CAAnimation类、实现动画 #pragma mark ** CABasicAnimation 动画 - (IBAction)handleCABasicAnimation:(id)sender { /* 创建动画类的对象 */ CABasicAnimation *basic = [CABasicAnimati...

weixin_30588907的博客 106

Objective-C 使用核心动画CAAnimation实现动画

先来看看效果吧 整个核心动画就不多做介绍了,随便一搜就能有很多很详细的解释,主要使用以下四种 CABasicAnimation //经典动画 CAKeyframeAnimation //关键帧动画 CATransition //转场动画 CAAnimationGroup //组动画 分析下本次demo的动画构成 主要动画是...

weixin_30266885的博客 170
上一篇: CoreAnimation —— CALayer
下一篇: 核心动画中的动画组和转场动画
RannieR
博客等级 码龄14年 180粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值