`

0929-核心动画

 
阅读更多

核心动画开发步骤:
1. 初始化一个动画对象(CAAnimation的具体子类)并设置一些动画相关属性
2. CALayer中很多属性都可以通过CAAnimation实现动画效果,包括:opacity、position、transform、bounds、contents等(可以在API文档中搜索:CALayer Animatable Properties)
3. 添加动画对象到层(CALayer)中,开始执行动画
4. 通过调用CALayer的addAnimation:forKey增加动画到层(CALayer)中,这样就能触发动画了。通过调用removeAnimationForKey可以停止层中的动画
5. Core Animation的动画执行过程都是在后台操作的,不会阻塞主线程

 

CAAnimation的继承结构

PS: 图中的紫色虚线代表“继承”某个类,红色虚线代表“遵守”某个协议
 

CAAnimation的属性说明(红色代表来自CAMediaTiming协议的属性):

 

duration:动画的持续时间
repeatCount:重复次数,无限循环可以设置HUGE_VALF或者MAXFLOAT
repeatDuration:重复时间
removedOnCompletion:默认为YES,代表动画执行完毕后就从图层上移除,图形会恢复到动画执行前的状态。如果想让图层保持显示动画执行后的状态,那就设置为NO,不过还要设置fillMode为kCAFillModeForwards
fillMode:决定当前对象在非active时间段的行为。比如动画开始之前或者动画结束之后
beginTime:可以用来设置动画延迟执行时间,若想延迟2s,就设置为CACurrentMediaTime()+2,CACurrentMediaTime()为图层的当前时间
timingFunction:速度控制函数,控制动画运行的节奏
delegate:动画代理

 

CAAnimation - 动画填充模式

属性fillMode的可选值 (注: 如果要使这个模式有效,需要设置removedOnCompletion = NO)


1. kCAFillModeRemoved 这个是默认值,也就是说当动画开始前和动画结束后,动画对layer都没有影响,动画结束后,layer会恢复到之前的状态
2. kCAFillModeForwards 当动画结束后,layer会一直保持着动画最后的状态
3. kCAFillModeBackwards 在动画开始前,只需要将动画加入了一个layer,layer便立即进入动画的初始状态并等待动画开始。
4. kCAFillModeBoth 这个其实就是上面两个的合成.动画加入后开始之前,layer便处于动画初始状态,动画结束后layer保持动画最后的状态

 

CAAnimation - 速度控制函数

速度控制函数(CAMediaTimingFunction)

1. kCAMediaTimingFunctionLinear(线性):匀速,给你一个相对静态的感觉
2. kCAMediaTimingFunctionEaseIn(渐进):动画缓慢进入,然后加速离开
3. kCAMediaTimingFunctionEaseOut(渐出):动画全速进入,然后减速的到达目的地
4. kCAMediaTimingFunctionEaseInEaseOut(渐进渐出):动画缓慢的进入,中间加速,然后减速的到达目的地。这个是默认的动画行为。

 

CAAnimation - 代理方法

NSObject定义里CAAnimation的以下代理方法,因此在使用以下代理方法时只需设置animation的代理然后直接在代理对象类中重写以下代理方法,不需要遵循任何的协议:

@interface NSObject (CAAnimationDelegate)

/* Called when the animation begins its active duration. */

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

/* Called when the animation either completes its active duration or
 * is removed from the object it is attached to (i.e. the layer). 'flag'
 * is true if the animation reached the end of its active duration
 * without being removed. */

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

@end

 

CABasicAnimation - 基本动画

基本动画是CAPropertyAnimation的子类。

 

属性说明:
- fromValue:keyPath相应属性的初始值
- toValue:keyPath相应属性的结束值

动画过程说明:
- 随着动画的进行,在长度为duration的持续时间内,keyPath相应属性的值从fromValue渐渐地变为toValue
- keyPath内容是CALayer的可动画Animatable属性
- 如果fillMode=kCAFillModeForwards同时removedOnComletion=NO,那么在动画执行完毕后,图层会保持显示动画执行后的状态。但在实质上,图层的属性值还是动画执行前的初始值,并没有真正被改变。

 

注意:

1. 基本动画只是实现了动画的效果,并没有改变动画对象的任何值,因此如果需要保留动画结束后的属性值,需要在动画结束后重新设置这些属性值。

2. 当应用程序失去焦点(用户打开任务栏或有电话进来时)或用户按"Home"键回到桌面,循环动画根据情况可能需要被暂停然后当应用程序回到前台时再继续动画(这个通过AppDelegate的几个代理方法实现)。如果动画是循环的,那么需要将removedOnComletion设置为NO。

 

分享到:
评论

相关推荐

    ios-核心动画高级技巧

    这个“ios-核心动画高级技巧”主题涵盖了几个关键概念,包括图层树、寄宿树、图层几何、隐式动画和显示动画。下面我们将详细探讨这些知识点。 1. **图层树(Layer Tree)**: - 图层树是Core Animation的基础,它...

    30-核心动画.zip

    在iOS开发中,核心动画(Core Animation)是一个至关重要的框架,它为构建流畅、复杂的动画效果提供了强大的支持。本资料“30-核心动画.zip”很可能是针对这一主题的深入学习资源,包括教程、示例代码或者项目实例,...

    ios-核心动画.zip

    在iOS开发中,核心动画(Core Animation)是一个强大的框架,用于创建流畅、复杂的视觉效果和动画。本资源“ios-核心动画.zip”显然是一个关于如何使用贝塞尔曲线(Bezier Curve)来设定动画路径的示例项目。让我们...

    iOS核心动画---基础动画

    在iOS开发中,核心动画(Core Animation)是Apple提供的一项强大的技术,用于创建丰富的视觉效果和流畅的动画。它是UIKit框架的重要组成部分,主要用于构建高性能、高质量的2D图形和动画。本节将深入探讨核心动画的...

    object-c 核心动画编程指南

    《Object-C核心动画编程指南》是Apple公司官方提供的一个专业文档,旨在向开发者介绍如何利用Objective-C语言在MacOSX和iOS平台上进行高效的动画编程。文档内容详细,涵盖了核心动画的关键概念、类结构、图层属性、...

    基于java的开发源码-GIF动画制作工具 GiftedMotion.zip

    基于java的开发源码-GIF动画制作工具 GiftedMotion.zip 基于java的开发源码-GIF动画制作工具 GiftedMotion.zip 基于java的开发源码-GIF动画制作工具 GiftedMotion.zip 基于java的开发源码-GIF动画制作工具 ...

    Unity编辑器扩展---动画事件编辑器

    Unity编辑器扩展---动画事件编辑器(仿UE4动画事件编辑器) Unity编辑器扩展---动画事件编辑器(仿UE4动画事件编辑器) Unity编辑器扩展---动画事件编辑器(仿UE4动画事件编辑器) Unity编辑器扩展---动画事件编辑器...

    网页设计作业模板-动画轮播图

    网页设计作业模板--动画轮播图、网页设计作业模板--动画轮播图、网页设计作业模板--动画轮播图、网页设计作业模板--动画轮播图、网页设计作业模板--动画轮播图、网页设计作业模板--动画轮播图、网页设计作业模板--...

    C#开发WPF-Silverlight动画及游戏系列教程-深蓝色右手 4

    C#开发WPF-Silverlight动画及游戏系列教程-深蓝色右手 C#开发WPF-Silverlight动画及游戏系列教程-深蓝色右手 C#开发WPF-Silverlight动画及游戏系列教程-深蓝色右手

    核心动画编程指南

    核心动画是iOS开发中一个非常重要的概念,它涉及到图形界面的动态表现,能够使应用程序更加生动和吸引用户。核心动画是建立在Objective-C语言的基础上的,它是Cocoa Touch框架的一部分,专门设计用于提供高效的动画...

    有趣小程序---动画精灵默林

    交互设计是这类小程序的核心。默林可能根据用户的触摸、滑动等操作做出相应的反应,实现与用户的互动。这种互动不仅限于简单的点击反馈,还可能涉及复杂的逻辑判断,比如通过识别用户的操作序列来触发特定的动画或...

    核心动画高级技巧

    本文档介绍了在使用核心动画时所涉及的基本概念。核心动画的是 Objective - C 的框架,它通过简单的动画编程接口来提供一套高性能的动画引擎。 你应该阅读此文档来理解Cocoa应用程序核心动画工作的机制。 阅读此文档...

    核心动画之转场动画

    在iOS开发中,动画是提升用户体验的关键因素之一,而核心动画(Core Animation)是Apple提供的一套强大的动画框架,用于创建丰富的视觉效果。本篇将详细探讨“核心动画之转场动画”,并基于提供的"12-核心动画"项目...

    swift-SHSnowflakesAnimation---雪花飘落动画-帧动画系列

    综上所述,"swift-SHSnowflakesAnimation---雪花飘落动画-帧动画系列"项目涵盖了Swift编程、图形绘制、动画控制、自定义视图等多个核心知识点,是学习和实践iOS动画开发的宝贵资源。通过这个项目,开发者可以深入...

    HTML-Javascript动画基础

    HTML和JavaScript是构建网页动态效果和交互的核心技术。在网页设计中,动画的运用能够极大地提升用户体验,使得网站更加生动有趣。本主题将深入探讨HTML和JavaScript在动画领域的应用,包括基本概念、渲染技术、矩阵...

    ios-弹弓动画.zip

    首先,我们要理解的是Core Animation框架,它是iOS平台上用于创建2D图形和动画的核心技术。在Objective-C中,我们通常通过CALayer来创建和管理动画。弹弓动画的实现主要涉及到两个关键概念:弹性(bounciness)和...

    AE-图层动画-LOGO小动画

    AE-图层动画-LOGO小动画

    iOS 核心动画编程指南

    iOS核心动画编程指南是一份针对iOS开发者提供的官方文档,其主要内容包括了使用Objective-C语言框架进行动画编程的基础知识和高级技术。通过这份指南,开发者可以学会如何运用Apple提供的核心动画API来创建引人入胜...

    swift-iOS核心动画便捷使用封装

    本文将深入探讨如何通过Swift对iOS核心动画进行便捷封装,以解决开发者在处理复杂动画时遇到的困难。 首先,我们要了解Core Animation的基础。Core Animation是一种低级图形框架,它为iOS和macOS提供了丰富的视觉...

    ios核心动画pdf

    ### iOS核心动画原理详解 #### 一、核心动画概述与基本概念 **核心动画**是iOS开发中的一个重要组成部分,它提供了高性能的动画引擎,并通过简单的编程接口让开发者能够轻松实现复杂的动画效果。核心动画框架主要...

Global site tag (gtag.js) - Google Analytics