iOS简单动画实现方案

一、仿射变换--CGAffineTransform

1.仿射变换,一种基于二维坐标的转换功能。CGAffineTransform数据结构代表一个二维坐标系的转换矩阵。

2.通过CGAffineTransform数据结构,可以构造二维坐标系内的平移、伸缩、旋转矩阵。详情可以参看苹果开发文档中关于该数据结构的解释。

3.UIView类的一个属性:transform,该属性相对于bounds的中心位置,该属性的类型为CGAffineTransform。初始化一个CGAffineTransform结构的矩阵,然后赋值给这个属性,就可以完成二维坐标系内的转换。

4.要形成动画,可以使用第三部分(UIView集成动画API)表述的方式,通过指定该属性的前后状态来形成动画,或者自己动态设置这个属性的值来形成动画。

二、三维变换--CATransform3D

1.CATransform3D数据结构代表一个三维坐标系的矩阵,通过它可以构造三维坐标系内的平移、伸缩、旋转矩阵。

2.UIView类的layer.transform属性,该属性相对于bounds的中心位置。该属性的类型为CATransform3D。该属性的使用方式以及动画的形成,同上一部分,但是使用这个属性实现三维动画,可能没那么好控制。

三、UIView集成的动画API

1.UIView集成了一系列的动画API。她的原理类似于flash动画的制作,我们指定物体(控件)某些属性在动画中的开始和结束状态,动画API就会自动生成中间的帧,从而生成动画。

2.使用示例(iOS4之前):
    //在这里指定控件的开始状态
    //xxxxxxxxxx
    [UIView beginAnimations:context:];
    [UIView setAnimationDuration:];
    [UIView setAnimationCurve:];
    [UIView setAnimationDelegate:];
    [UIView setAnimationWillStartSelector:@selector(animationDidStart:context)];
    [UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context)];
    //在这里指定控件的结束状态
    //xxxxxxxxx
    [UIView commitAnimations];

    代理方法的声明要使用如下方式:
    (void)animationDidStart:(NSString *)animationID context:(void *)context
    (void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context

3.使用示例(iOS4及以后)

(1)从iOS4系统之后,第2点提到整套API被废弃了,应该使用block的方式来生成动画。API列表如下:
   animateWithDuration:delay:options:animations:completion:
   animateWithDuration:animations:completion:
   animateWithDuration:animations:
   transitionWithView:duration:options:animations:completion:
   transitionFromView:toView:duration:options:completion:

(2)使用此套API的时候,将控件的结束状态写在block中就可以了。

4.因为此系列API只指定动画的开始和结束状态,所以只能做一些有规律的动画,否则API会不知道如何生成中间帧。常用动画举例:平移,伸缩,旋转,透明度变化,颜色变化等等。

四、核心动画

1.比较常用的动画类:CATransition和CAAnimation。
(1)CATransition用于使用系统集成的动画。
(2)CAAnimation用于实现自定义动画,但是它是一个抽象类,不能直接使用,要子类化才能使用。类库中存在已经子类化的类可以使用,比如CAKeyframeAnimation,此类通过给一个layer的属性指定一组值,包含开始、结束以及中间的一些用来修正动画的值,然后根据这些值,生成每一帧,来生成动画。

2.CATransition动画实现示例:
   CATransition *transition = [CATransition animation];
   transition.duration = 0.8;
   transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
   transition.type = @"cube";
   transition.subtype = kCATransitionFromRight;
   [xxxView.layer addAnimation:transition forKey:nil];

3.CAAnimation使用示例:
   CGFloat perAngle = M_PI / 64; 
   CAKeyframeAnimation *keyFrameAnination = [CAKeyframeAnimation animationWithKeyPath:@"transform"];
   [keyFrameAnination setDuration:2.0f];
   [keyFrameAnination setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
   [keyFrameAnination setRemovedOnCompletion:NO];
   [keyFrameAnination setFillMode:kCAFillModeForwards];
   [keyFrameAnination setDelegate:self];
   NSMutableArray *values = [[NSMutableArray alloc]initWithCapacity:10];
   for (CGFloat clipRdn = angle; clipRdn >= 0; clipRdn -= perAngle) {
        CATransform3D transform = CATransform3DMakeRotation(clipRdn, 0.0f, 1.0f, 0.0f);
        transform.m34 = sin(clipRdn) / 4000.0f;
        transform.m14 = -sin(clipRdn) / 4000.0f;
        [values addObject:[NSValue valueWithCATransform3D:transform]];
   }
   [keyFrameAnination setValues:values];
   [values release];
   [self.imageView.layer addAnimation:keyFrameAnination forKey:@"animation"];

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/500119.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

三维转换矩阵解释

一、图解 二、单位矩阵{1.0f,0.0f,0.0f,0.0f;0.0f,1.0f,0.0f,0.0f;0.0f,0.0f,1.0f,0.0f;0.0f,0.0f,0.0f,1.0f;}

Objective-C文件流操作

一、NSFileHandle1.它能够以流的方式访问基于文件、网络、管道、设备的数据,可以设置写入的位置指针。2.NSData、NSString写入文件的方法是直接覆盖写入,全部读出,当处理大数据的文件时,对内存会造成压力。而NSFileHandle能够以流…

CoreAnimation编程指南(简介)

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

CoreAnimation编程指南(一)概念

一、概述1.核心动画是一套包含图形绘制,投影,动画的Objective–C类集合。它通过开发人员所熟悉的应用程序套件和Cocoa Touch视图架构的抽象分层模式,同时使用先进的合作效果提供了一套流畅的动画。2.动态的动画接口很难创建,但是核…

python实现常见排序算法

python实现常见排序算法 快速排序 思想&#xff1a;取出第一个元素把它放到序列的中间某一个正确位置&#xff0c;以它进行分割成左边和右边&#xff0c;再分别对左边和右边进行取元素分割&#xff08;递归&#xff09; 递归实现 def quicksort(array):if len(array) < …

CoreAnimation编程指南(二)渲染架构

1.虽然核心动画的图层和Cocoa的视图在很大程度上没有一定的相似性&#xff0c;但是他们两者最大的区别是&#xff0c;图层不会直接渲染到屏幕上。2.在模型-视图-控制器&#xff08;model-view-controller&#xff09;概念里面NSView和UIView是典型的视图部分&#xff0c;但是在…

学习递归

算法之递归 递归思想 递归就是函数自己调用自己&#xff0c;会使代码逻辑很清晰&#xff0c;但是Stack Overflow上有说的一句话&#xff1a;“如果使用循环&#xff0c;程序的性能可能更高&#xff1b;如果使用递归&#xff0c;程序可能更容易理解。如何选择要看什么对你来说…

CoreAnimation编程指南(三)几何变换

本章介绍图层的几何组成部分&#xff0c;及他们之间的相互关&#xff0c;同时介绍如何变换矩阵可以产生复杂的视觉效果。一、图层的坐标系1.图层的坐标系在不同平台上面具有差异性。在iOS系统中&#xff0c;默认的坐标系统原点在图层的中心左上角地方&#xff0c;原点向右和向下…

队列和栈

栈 一张图可以简单的说明 为了达到时间复杂度最低&#xff1a;选择的是python列表实现栈&#xff0c;而列表是顺序表 入栈push的时候选择在列表的尾部进行添加元素&#xff0c;出栈在列表尾部弹出 class Stack(object):"""栈"""def __init__(…

CoreAnimation编程指南(四)图层树结构

图层不但给自己提供可视化的内容和管理动画&#xff0c;而且充当了其他图层的容器类&#xff0c;构建图层层次结构。 本章介绍了图层层次结构&#xff0c;以及如何操纵该图层层次结构。一、什么是图层树的层次结构1.图层树是核心动画里面类似Cocoa视图的层次结构。比如一个NSVi…

学习散列表

回顾一下简单查找和二分查找 杂货店商品对应的价格举例&#xff1a; 简单查找就是拿出商品价目本&#xff0c;这个价目本并不是有序的&#xff0c;顾客问苹果多少钱&#xff0c;需要一个一个去查找某一个商品的价格&#xff0c;需要O(n)时间。 同样是一个价目本&#xff0c;但…

CoreAnimation编程指南(五)图层内容

当我们使用Cocoa的视图的时候&#xff0c;我们必须继承NSView或者UIView并且重载函数drawRect:来显示任何内容。但是CALayer实例可以直接使用&#xff0c;而无需继承子类。因为CALayer是一个键-值编码兼容的容器类&#xff0c;你可以在实例里面存储任意值&#xff0c;所以子类实…

SHA算法

回顾散列算法 我的上篇文章&#xff1a;学习散列表 在上篇文章杂货铺的示例中&#xff0c;我们希望散列函数的结果是均匀分布的。散列函数接受一个字符串&#xff0c;并返回一 个索引号。 安全散列算法&#xff08;secure hash algorithm&#xff0c; SHA&#xff09;函数 给…

CoreAnimation编程指南(六)动画

动画是当今用户界面的关键因素。当使用核心动画的时候&#xff0c;动画是自动完成的。没有动画的循环和计数器。你的应用程序不负负责重绘&#xff0c;也不负责跟踪动画的当前状态。动画在独立线程里面自动执行&#xff0c;没有和你的应用程序交互。本章提供了对动画类的概览&a…

CoreAnimation编程指南(七)图层Action

图层的行为在以下情况发生的时候被触发&#xff1a;从图层树里面插入或者删除一个图层&#xff0c;图层的属性值被修改了&#xff0c;或者程序显式要求。通常情况下&#xff0c;行为触发器是动画显示的结果所在。1.1 行为对象的角色一个行为对象是一个通过CAAction协议响应行为…

python实现搜索之二分查找

搜索 搜索是在一个项目集合中找到一个特定项目的算法过程。搜索通常的答案是真的或假的&#xff0c;因为该项目是否存在。 搜索的几种常见方法&#xff1a;顺序查找、二分法查找、二叉树查找、哈希查找 二分法查找 二分查找又称折半查找&#xff0c;优点是比较次数少&#x…

CoreAnimation编程指南(八)事务

图层的每个改变都是事务的一部分。CATransaction是核心动画类&#xff0c;它负责成批的把多个图层树的修改作为一个原子更新到渲染树。本章介绍了核心动画支持的两种事务。隐式事务和显式事务。1.1 隐式事务当图层树被没有获得事务的线程修改的时候将会自动创建隐式事务&#x…

写SQL语句需要注意的点

先回忆一下DDL和DML 创建表DDL create table t_xx(id int auto_increment primary key, name char(10),...) create table t_student( id int auto_increment primary key , name char(10), 外键id int, foreign key(外键id) references 外表t_class(外表id字段名) );插入数…

CoreAnimation编程指南(九)图层布局

NSView提供了经典的“stuts and springs”模式&#xff0c;用于视图调整大小的时候把关联到它父图层的视图重新调整位置。图层支持该模式&#xff0c;而且Mac OS X上面的核心动画提供了一个更通用的布局管理器机制&#xff0c;允许开发者自己写他们自己的布局管理器。可以为图层…

数据库优化、数据库基础等常用知识点总结

建表优化 1&#xff09;数据库范式 第一范式&#xff08;1NF&#xff09;&#xff1a;强调的是列的原子性&#xff0c;即列不能够再分成其他几列。 如电话列可进行拆分—家庭电话、公司电话第二范式&#xff08;2NF&#xff09;&#xff1a;首先是 1NF&#xff0c;另外包含两…