上次学习了iOS学习笔记09-核心动画CoreAnimation,这次继续学习动画,上次使用的CoreAnimation很多人感觉使用起来很繁琐,有没有更加方便的动画效果实现呢?答案是有的,那就是UIView动画封装

一、UIView动画

苹果知道图层动画使用麻烦,就为我们封装到了UIView里,使我们可以简单的实现各种动画效果。

1. 基础动画

主要实现方法为:
+ (void)animateWithDuration:(NSTimeInterval)duration
delay:(NSTimeInterval)delay
options:(UIViewAnimationOptions)options
animations:(void (^)(void))ainimations
completion:(void (^)(BOOL finished))completion;
移动动画使用实例:
/*
开始动画,UIView的动画方法执行完后动画会停留在终点位置,而不需要进行任何特殊处理
duration:执行时间
delay:延迟时间
options:动画设置,例如自动恢复、匀速运动等
completion:动画完成回调方法
*/
[UIView animateWithDuration:5.0 delay:0 options:UIViewAnimationOptionCurveLinear animations:^{
_imageView.center = location;
} completion:^(BOOL finished) {
NSLog(@"Animation end.");
}];

上面的方法基本满足大部分基础动画的要求,还有一种比较有趣的动画效果

弹簧动画效果:
/*
创建弹性动画
damping:阻尼,范围0-1,阻尼越接近于0,弹性效果越明显
springVelocity:弹性复位的速度
*/
[UIView animateWithDuration:5.0 delay:0 usingSpringWithDamping:0.1
initialSpringVelocity:1.0 options:UIViewAnimationOptionCurveLinear animations:^{
_imageView.center = location;
} completion:^(BOOL finished) {
NSLog(@"Animation end.");
}];

UIView动画方法中有个options参数,是枚举类型,可以组合使用:

/* 常规动画属性设置,可以同时选择多个,用或运算组合  */
UIViewAnimationOptionLayoutSubviews/*< 动画过程中保证子视图跟随运动 */
UIViewAnimationOptionAllowUserInteraction/*< 动画过程中允许用户交互 */
UIViewAnimationOptionBeginFromCurrentState/*< 所有视图从当前状态开始运行 */
UIViewAnimationOptionRepeat/*< 重复运行动画 */
UIViewAnimationOptionAutoreverse/*< 动画运行结束后回到起始点 */
UIViewAnimationOptionOverrideInheritedDuration/*< 忽略嵌套动画时间设置 */
UIViewAnimationOptionOverrideInheritedCurve/*< 忽略嵌套动画速度设置 */
UIViewAnimationOptionAllowAnimatedContent/*< 动画过程中重绘视图,只适合转场动画 */
UIViewAnimationOptionShowHideTransitionViews/*< 视图切换直接隐藏旧视图、显示新视图,只适合转场动画 */
UIViewAnimationOptionOverrideInheritedOptions/*< 不继承父动画设置或动画类型 */ /* 动画速度变化控制,其中选一个进行设置 */
UIViewAnimationOptionCurveEaseInOut/*< 动画先缓慢,后逐渐加速,默认值 */
UIViewAnimationOptionCurveEaseIn/*< 动画逐渐变慢 */
UIViewAnimationOptionCurveEaseOut/*< 动画逐渐加速 */
UIViewAnimationOptionCurveLinear/*< 动画匀速执行 */

2. 关键帧动画

主要实现方法为:
+ (void)animateKeyframesWithDuration:(NSTimeInterval)duration
delay:(NSTimeInterval)delay
options:(UIViewAnimationOptions)options
animations:(void (^)(void))ainimations
completion:(void (^)(BOOL finished))completion;
实例:
[UIView animateKeyframesWithDuration:5.0 delay:0
options:UIViewAnimationOptionCurveLinear | UIViewAnimationOptionCurveLinear animations:^{
//第一个关键帧:从0秒开始持续50%的时间,也就是5.0*0.5=2.5秒
[UIView addKeyframeWithRelativeStartTime:0.0 relativeDuration:0.5 animations:^{
_imageView.center = location1;
}];
//第二个关键帧:从50%时间开始持续25%的时间,也就是5.0*0.25=1.25秒
[UIView addKeyframeWithRelativeStartTime:0.5 relativeDuration:0.25 animations:^{
_imageView.center = location2;
}];
//第三个关键帧:从75%时间开始持续25%的时间,也就是5.0*0.25=1.25秒
[UIView addKeyframeWithRelativeStartTime:0.75 relativeDuration:0.25 animations:^{
_imageView.center = location3;
}];
} completion:^(BOOL finished) {
NSLog(@"Animation end.");
}];
关键帧动画的options多了一些选择:
/* 动画模式选择,选择一个 */
UIViewKeyframeAnimationOptionCalculationModeLinear/*< 连续运算模式 */
UIViewKeyframeAnimationOptionCalculationModeDiscreter/*< 离散运算模式 */
UIViewKeyframeAnimationOptionCalculationModePacedr/*< 均匀执行运算模式 */
UIViewKeyframeAnimationOptionCalculationModeCubicr/*< 平滑运算模式 */
UIViewKeyframeAnimationOptionCalculationModeCubicPacedr/*< 平滑均匀运算模式 */

UIView动画现在只支持属性关键帧动画,不支持路径关键帧动画

3. 转场动画

主要实现方法为:
+ (void)transitionWithView:(UIView *)view
duration:(NSTimeInterval)duration
options:(UIViewAnimationOptions)options
animations:(void (^)(void))ainimations
completion:(void (^)(BOOL finished))completion;
实例:
#pragma mark 转场动画
- (void)transitionAnimation:(BOOL)isNext{
UIViewAnimationOptions option;
if (isNext) {
option = UIViewAnimationOptionCurveLinear | UIViewAnimationOptionTransitionFlipFromRight;
} else {
option = UIViewAnimationOptionCurveLinear | UIViewAnimationOptionTransitionFlipFromLeft;
}
[UIView transitionWithView:_imageView duration:1.0 options:option animations:^{
_imageView.image = [self getImage:isNext];
} completion:nil];
}
转场动画options多了一些选择:
/* 转场类型 */
UIViewAnimationOptionTransitionNone/*< 没有转场动画效果 */
UIViewAnimationOptionTransitionFlipFromLeft/*< 从左侧翻转效果 */
UIViewAnimationOptionTransitionFlipFromRight/*< 从右侧翻转效果 */
UIViewAnimationOptionTransitionCurlUp/*< 向后翻页的动画过渡效果 */  
UIViewAnimationOptionTransitionCurlDown/*< 向前翻页的动画过渡效果 */   
UIViewAnimationOptionTransitionCrossDissolve/*< 溶解消失效果 */ 
UIViewAnimationOptionTransitionFlipFromTop/*< 从上方翻转效果 */
UIViewAnimationOptionTransitionFlipFromBottom/*< 从底部翻转效果 */
  • 使用UIView动画封装的转场动画效果少,这里无法直接使用私有API
  • 两个视图之间转场可以使用
+ (void)transitionFromView:(UIView *)fromView
toView:(UIView *)toView
duration:(NSTimeInterval)duration
options:(UIViewAnimationOptions)options
completion:(void (^)(BOOL finished))completion;
  • 默认情况,转出的视图会从父视图移除,转入后重新添加

iOS学习笔记10-UIView动画的更多相关文章

  1. iOS学习笔记-自定义过渡动画

    代码地址如下:http://www.demodashi.com/demo/11678.html 这篇笔记翻译自raywenderlick网站的过渡动画的一篇文章,原文用的swift,由于考虑到swif ...

  2. iOS学习笔记09-核心动画CoreAnimation

    http://www.cnblogs.com/liutingIOS/p/5368536.html 一.CALayer CALayer包含在QuartzCore框架中,具有跨平台性,在iOS中使用Cor ...

  3. iOS学习笔记10 - Bundle和Info.plist

    经常会有需要从应用中搜索并读取一个文件或图片.这时候就会用到如下的语句: NSString *path = [[NSBundle mainBundle] pathForResource:@" ...

  4. iOS学习笔记-精华整理

    iOS学习笔记总结整理 一.内存管理情况 1- autorelease,当用户的代码在持续运行时,自动释放池是不会被销毁的,这段时间内用户可以安全地使用自动释放的对象.当用户的代码运行告一段 落,开始 ...

  5. iOS学习笔记总结整理

    来源:http://mobile.51cto.com/iphone-386851_all.htm 学习IOS开发这对于一个初学者来说,是一件非常挠头的事情.其实学习IOS开发无外乎平时的积累与总结.下 ...

  6. IOS学习笔记(四)之UITextField和UITextView控件学习

    IOS学习笔记(四)之UITextField和UITextView控件学习(博客地址:http://blog.csdn.net/developer_jiangqq) Author:hmjiangqq ...

  7. iOS学习笔记-自己动手写RESideMenu

    代码地址如下:http://www.demodashi.com/demo/11683.html 很多app都实现了类似RESideMenu的效果,RESideMenu是Github上面一个stars数 ...

  8. IOS学习笔记25—HTTP操作之ASIHTTPRequest

    IOS学习笔记25—HTTP操作之ASIHTTPRequest 分类: iOS2012-08-12 10:04 7734人阅读 评论(3) 收藏 举报 iosios5网络wrapper框架新浪微博 A ...

  9. IOS学习笔记06---C语言函数

    IOS学习笔记06---C语言函数 --------------------------------------------  qq交流群:创梦技术交流群:251572072              ...

随机推荐

  1. LeetCode——Find Median from Data Stream

    Median is the middle value in an ordered integer list. If the size of the list is even, there is no ...

  2. [编辑器]走上atom之路1

    祝大家新年快乐 我就是来卖个萌,逃- 正文 我最开始用atom是因为它看起来比较酷,我工作中主力还是使用pycharm,毕竟atom只是一个编辑器.我一 般只是用atom来写Markdown的文件.随 ...

  3. 轻松认识JVM运行时数据区域(使用思维导图)

    下面是个人阅读周志明编写的深入浅出Java虚拟机做成思维导图的笔记,线条.颜色和图片的视觉印象比起单纯文字笔记好得太多了,文字笔记的枯燥以及硬性记忆我就不再多说,特别对于JVM这块略微有点枯燥的知识, ...

  4. linux中$与()的一点使用疑惑解释

    a=$(cat 1.sh)等价于a=`cat 1.sh` 而a=(cat 1.sh) 相当于定义一个a数组,内容为cat 1.sha=(`cat 1.sh`)相当于把1.sh里面的内容当成a的数组,a ...

  5. Enterprise Library - Data Access Application Block 6.0.1304

    Enterprise Library - Data Access Application Block 6.0.1304 企业库,数据访问应用程序块 6.0.1304 企业库的数据访问应用程序块的任务简 ...

  6. 基于Lumisoft.NET组件的SMTP账号登陆检测

    在邮件处理的方面,Lumisoft.NET可以说是非常不错的一个选择,我在前面几篇文章中都介绍过这个组件. 基于Lumisoft.NET组件开发碰到乱码等一些问题的解决 基于Lumisoft.NET组 ...

  7. 转帖一篇sixxpack破解的文章!

    星期天闲着没事玩游戏,玩游戏不能无外挂.于是百度了半天,找到了一个,看介绍貌似不错,就下载了下来.一看,竟然是用.net写的,下意识地Reflector了一下.发现竟是一个叫actmp的程序集.如图: ...

  8. 不可或缺 Windows Native (1) - C 语言: hello c

    [源码下载] 不可或缺 Windows Native (1) - C 语言: hello c 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 在 Windows Sto ...

  9. WinFrom子窗体向父窗体传值

    父窗框mainForm;子窗体childForm,利用事件进行传值 在子窗体中的操作: public event EventHandler accept;public string value; pr ...

  10. 通过NameValuePairsValueProvider对象来获取指定前缀的Key

    using System; using System.Collections.Generic; using System.Linq; using System.Web.Http.ValueProvid ...