(转)iOS动画Core Animation
文章转载:http://blog.sina.com.cn/s/blog_7b9d64af0101b8nh.html
在iOS中动画实现技术主要是:Core Animation。
Core Animation负责所有的滚动、旋转、缩小和放大以及所有的iOS动画效果。其中UIKit类通常都有animated:参数部分,它可以允许是否使用动画。
Core Animation主要是使用
我们知道每个UIView都关联到一个CALayer对象,CALayer是Core Animation中的图层。
Core Animation主要就是通过修改图层来改变UI的大小,位置,从而实现动画效果。
可以说,任何一个应用程序都离不开动画!
就连苹果各个UI控件中的切换操作,都有它内在的动画。
了解一下,关于动画的一些知识。
任何知识点,都会迁出一系列的知识点。
[UIView beginAnimations:@"dropDownloadLabel" context:UIGraphicsGetCurrentContext()];
[UIView setAnimationDuration: 0.5];
[UIView setAnimationBeginsFromCurrentState: NO];
// 执行的动画code
[UIView commitAnimations];
就将这段代码作为知识的切入点,开始了解吧。
[UIView beginAnimations:@"dropDownloadLabel" context:UIGraphicsGetCurrentContext()];
[UIView commitAnimations];
这两句代码,标记了一个动画的开始和结束。在中间我们可以写我们的一些动画操作!
beginAnimations方法
+ (void)beginAnimations:(NSString *)animationID context:(void *)context
用来,表示动画的开始。
animationID:作为动画的标识
context:自定义的一些动画数据,这些数据将发送给动画的代理方法:setAnimationWillStartSelector:方法和setAnimationDidStopSelector:方法。
这个,参数,通常为nil。我们可以直接设置为nil。
这里,我们使用UIGraphicsGetCurrentContext();因为此方法默认也会返回nil。
该方法告诉系统,我们将开始动画。并且,在该方法后,我们可以通过setAnimationXXX(一系列方法)来设置我们进行的动画的一些参数。
完成动画后,调用commitAnimations方法来通知系统,动画结束。
至此,我们知道,就是设置动画的一些列参数的方法即setAnimationXXX方法。
[UIView setAnimationDuration: 0.5];
[UIView setAnimationBeginsFromCurrentState: NO];
动画是可以嵌套的。
[UIView beginAnimations:@"animation_1" context:UIGraphicsGetCurrentContext()];
// code1
[UIView beginAnimations:@"animation_2" context:UIGraphicsGetCurrentContext()];
// code2
[UIView commitAnimations];
[UIView commitAnimations];
如果我们为动画设置了,setAnimationWillStartSelector:方法和setAnimationDidStopSelector:方法。
那么当动画开始或者停止的时候,动画的animationID参数和context参数,会传递给setAnimationWillStartSelector:方法和setAnimationDidStopSelector:方法。
悲剧总是要发生的!
苹果API在最后的描述中,给了这么一句话:
Use of this method is discouraged in iOS 4.0 and later. You should use the block-based animation methods to specify your animations instead.
可见,在iOS 4.0 后,block语法,大大增多了。这种方式,是不建议的,需要我们使用block的方式。
于是,动画的block方式:
[UIView animateWithDuration:0.3f delay:0.0f options:UIViewAnimationOptionCurveLinear
animations:^{ // 执行的动画code}
completion:^(BOOL finished){
// 完成后执行code
}];
在尽量用block来完成动画,因为说不定啥时候,老的动画方式,将被废除。
到此,可以告一段落。但是,我想将这简单的动画代码,一查到底!
commitAnimations方法:
+ (void)commitAnimations
标记动画结束。与beginAnimations方法成对使用。
例如:
[UIView commitAnimations];
一系列的setAnimationXXX方法:
setAnimationDuration方法:
+ (void)setAnimationDuration:(NSTimeInterval)duration
设置动画持续时间(秒)
例如:
[UIView setAnimationDuration: 0.5];
setAnimationBeginsFromCurrentState方法
+ (void)setAnimationBeginsFromCurrentState:(BOOL)fromCurrentState
设置动画开始时的状态。
我们构想一个场景:一般,我们按下一个按钮,将会执行动画一次。
当YES时:当上一次动画正在执行中,那么当下一个动画开始时,上一次动画的当前状态将成为下一次动画的开始状态。
当NO时:当上一个动画正在执行中,那么当下一个动画开始时,上一次动画需要先恢复到完成时的状态,然后在开始执行下一次动画。
setAnimationStartDate方法
+ (void)setAnimationStartDate:(NSDate *)startTime
设置动画开始时间。
setAnimationDelay方法
+ (void)setAnimationDelay:(NSTimeInterval)delay
设置动画开始的延迟时间(秒)。
setAnimationCurve方法
+ (void)setAnimationCurve:(UIViewAnimationCurve)curve
设置动画的曲线方式(就是动画的总体变化的时间曲线:开始快最后慢,开始慢最后快,最后慢,均匀线性)。
curve参数如下:
typedef NS_ENUM(NSInteger, UIViewAnimationCurve) {
UIViewAnimationCurveEaseInOut, // slow at beginning and end
UIViewAnimationCurveEaseIn, // slow at beginning
UIViewAnimationCurveEaseOut, // slow at end
UIViewAnimationCurveLinear
};
setAnimationRepeatCount方法
+ (void)setAnimationRepeatCount:(float)repeatCount
设置动画重复次数
setAnimationRepeatAutoreverses方法
+ (void)setAnimationRepeatAutoreverses:(BOOL)repeatAutoreverses
设置动画是否做一次反向的执行。
如果设置为YES:动画将执行:动画初始状态》动画》动画完成状态》动画》动画初始状态。
如果设置为NO:默认值
setAnimationsEnabled方法
+ (void)setAnimationsEnabled:(BOOL)enabled
设置动画是否可用!
YES:默认值。
NO:动画效果被禁用
注意:仅仅是动画是否可用,在动画中被改变的UI对象依然是起作用的。仅仅是动画效果被禁用了。
areAnimationsEnabled方法
+ (BOOL)areAnimationsEnabled
返回动画效果是否被禁用。
提倡使用block方式来进行更加多的,简洁的控制!
其实发现了,这篇博客已经有点长了!有点坏味道!
不过,回头看,既然开篇就提到了Core Animation!
苹果中,默认的的简单动画,可以用setAnimationXXX一类的方法。但是如果,要让动画更加美观,复杂,那我想就要考Core Animation了!
做个分割,以下了解Core Animation!
------------------------------------------------------------------------------------------------------------------------------------
先来个代码吧!
[_imgPic setImage:image];// 设置新的图片
CATransition *animation = [CATransition animation];
[animation setDuration:1.0];
[animation setFillMode:kCAFillModeForwards];
[animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]];
[animation setType:@"rippleEffect"];// rippleEffect
[animation setSubtype:kCATransitionFromTop];
[_imgPic.layer addAnimation:animation forKey:nil];
一头茫然啊!
UIView和CATransition两种动画是什么关系?到底用哪一种呢?
一种是UIView层面的。
一种是使用CATransition进行更低层次的控制。
第一种是UIView,UIView方式可能在低层也是使用CATransition进行了封装,它只能用于一些简单的、常用的效果展现。
所以,两者,往往在需要复杂的动画,应该用CATransition吧。
(转)iOS动画Core Animation的更多相关文章
- iOS 核心动画 Core Animation浅谈
代码地址如下:http://www.demodashi.com/demo/11603.html 前记 关于实现一个iOS动画,如果简单的,我们可以直接调用UIView的代码块来实现,虽然使用UIVie ...
- iOS开发之核心动画(Core Animation)
1.概述 Core Animation是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍,使用它需要先添加QuartzCore.framework和引入对应的框架< ...
- iOS开发 - Core Animation 核心动画
Core Animation Core Animation.中文翻译为核心动画,它是一组很强大的动画处理API,使用它能做出很炫丽的动画效果.并且往往是事半功倍. 也就是说,使用少量的代码就能够实现很 ...
- iOS - Core Animation(核心动画)
Core Animation,中文翻译为核心动画,它是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍.也就是说,使用少量的代码就可以实现非常强大的功能.Core An ...
- iOS 图形图像动画 Core Animation
//Core Animation #define WeakSelf __weak __typeof(self) weakSelf = self #define StrongSelf __strong ...
- 核心动画——Core Animation
一. CALayer (一). CALayer简单介绍 在iOS中,你能看得见摸得着的东西基本上都是UIView,比方一个button.一个文本标签.一个文本输入框.一个图标等等.这些都是UIView ...
- IOS中的动画——Core Animation
一.基础动画 CABasicAnimation //初始化方式 CABasicAnimation * cabase=[CABasicAnimation animation]; //通过keyPath设 ...
- 动画(Animation) 、 高级动画(Core Animation)
1 演示UIImage制作的动画 1.1 问题 UIImage动画是IOS提供的最基本的动画,通常用于制作一些小型的动画,本案例使用UIImage制作一个小狗跑动的动画,如图-1所示: 图-1 1.2 ...
- Core Animation编程指南
本文是<Core Animation Programming Guide>2013-01-28更新版本的译文.本文略去了原文中关于OS X平台上Core Animation相关内容.因为原 ...
随机推荐
- touch事件学习
window.onload = function(){ var touch = { movetarget : false, touchStart : function (e) { console.lo ...
- db2日期和时间常用汇总
1.db2可以通过SYSIBM.SYSDUMMY1.SYSIBM.DUAL获取寄存器中的值,也可以通过VALUES关键字获取寄存器中的值. SELECT 'HELLO DB2' FROM SYSIBM ...
- poj 3635(bfs+优先队列)
题目链接:http://poj.org/problem?id=3635 思路:本题主要运用的还是贪心思想,由于要求st->ed的最小花费,那么每经过一个城市,能不加油就尽量不加油,用dp[i][ ...
- spring_150801_autowired_qualifier
新建java project工程,建src.conf.test源码文件夹,导入相关包,需要spring的相关jar包和common-logging相关jar包 接口Service: package c ...
- Spring中RedirectAttributes对象重定向传参
Spring3中的FlashAttribute 为 了防止用户刷新重复提交,save操作之后一般会redirect到另一个页面,同时带点操作成功的提示信息.因为是Redirect,Request里 的 ...
- ios 监听app从后台恢复到前台
正常情况下,在AppDelegate中实现下面两个方法,能够监听从后台恢复到前台 [cpp] - (void)applicationDidEnterBackground:(UIApplication ...
- Linux下SSH各配置项解释
关于ssh 设置的相关总结(ssh最大连接数.ssh连接时长.安全性配置等) 以redhat6.3为例 ssh配置文件在: /etc/ssh/sshd_config 可以打开查看相应配置,默认情况下只 ...
- Android 广播机制(两种注册方法)与中断广播
两种注册类型的区别是: 1)第一种不是常驻型广播,也就是说广播跟随activity的生命周期.注意: 在activity结束前,移除广播接收器. 2)第二种是常驻型,也就是说当应用程序关闭后,如果有信 ...
- [c/c++]指针数组 pk 数组指针
首先强调 指针数组归根结底是个数组:数组指针归根结底是个指针. 数组指针 以int (*int)[10]为例 ()的优先级大于[],因此首先它是一个指针,它指向一个数组,数组的维数是10.因此数组指针 ...
- WebMvcConfigurerAdapter
spring Boot 默认的处理方式就已经足够了,默认情况下Spring Boot 使用WebMvcAutoConfiguration中配置的各种属性. 建议使用Spring Boot 默认处理方式 ...