iOS学习笔记10-UIView动画
上次学习了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动画的更多相关文章
- iOS学习笔记-自定义过渡动画
代码地址如下:http://www.demodashi.com/demo/11678.html 这篇笔记翻译自raywenderlick网站的过渡动画的一篇文章,原文用的swift,由于考虑到swif ...
- iOS学习笔记09-核心动画CoreAnimation
http://www.cnblogs.com/liutingIOS/p/5368536.html 一.CALayer CALayer包含在QuartzCore框架中,具有跨平台性,在iOS中使用Cor ...
- iOS学习笔记10 - Bundle和Info.plist
经常会有需要从应用中搜索并读取一个文件或图片.这时候就会用到如下的语句: NSString *path = [[NSBundle mainBundle] pathForResource:@" ...
- iOS学习笔记-精华整理
iOS学习笔记总结整理 一.内存管理情况 1- autorelease,当用户的代码在持续运行时,自动释放池是不会被销毁的,这段时间内用户可以安全地使用自动释放的对象.当用户的代码运行告一段 落,开始 ...
- iOS学习笔记总结整理
来源:http://mobile.51cto.com/iphone-386851_all.htm 学习IOS开发这对于一个初学者来说,是一件非常挠头的事情.其实学习IOS开发无外乎平时的积累与总结.下 ...
- IOS学习笔记(四)之UITextField和UITextView控件学习
IOS学习笔记(四)之UITextField和UITextView控件学习(博客地址:http://blog.csdn.net/developer_jiangqq) Author:hmjiangqq ...
- iOS学习笔记-自己动手写RESideMenu
代码地址如下:http://www.demodashi.com/demo/11683.html 很多app都实现了类似RESideMenu的效果,RESideMenu是Github上面一个stars数 ...
- IOS学习笔记25—HTTP操作之ASIHTTPRequest
IOS学习笔记25—HTTP操作之ASIHTTPRequest 分类: iOS2012-08-12 10:04 7734人阅读 评论(3) 收藏 举报 iosios5网络wrapper框架新浪微博 A ...
- IOS学习笔记06---C语言函数
IOS学习笔记06---C语言函数 -------------------------------------------- qq交流群:创梦技术交流群:251572072 ...
随机推荐
- Tips12: 私人定制 专属的Unity3D 脚本模板
在使用U3D的过程中,新建一个C#脚本,它包含着空的Start()和Update()函数. 根据个人习惯的不同,可能有些人有着自己的脚本风格,每次进去都增删改很麻烦,这里介绍一个更改新建脚本模板的方 ...
- 在做Android开发的,如何去掉滚动view在尽头时的阴影效果
不经意的在开发中,发现qq的侧滑几乎没有阴影效果,就是拉到边界没有时出现的效果:于是在网上找了下,发现很简单的设置 只要在xml布局文件的滚动或者侧滑控件中加入如下样式: android:overSc ...
- Node.js建站笔记-使用react和react-router取代Backbone
斟酌之后,决定在<嗨猫>项目中引入react,整体项目偏重spa模式,舍弃部分server端的模板渲染,将一部分渲染工作交给前端react实现. react拥有丰富的组件,虽然不如Back ...
- sql server 随机读取数据
--sql server 随机读取数据 * FROM [tablename] ORDER BY NEWID() pk from [tablename] ORDER BY NEWID()) --这两个方 ...
- 设计模式之Interator模式(1)
interator是java容器遍历的一种手段,当然遍历容易你可以使用普通的for(;;)或者for(Object o : new Arraylist<Object>()),都是可以的. ...
- 转载:第六弹!全球首个微信小程序(应用号)开发教程!通宵吐血赶稿!
大家好!博卡君原计划是能在国庆假期前把小程序的开发教程做完,给大家一套完整.系统的东西,不过由于最近小程序开发工具的拍照组件尚未完善,很多功能还不能顺利实现.我考虑了一下,觉得不如把拍照部分的一些代码 ...
- Mysql创建用户的三种基本方法
1.采用create user e.g. create user 'username'@'host' identified by 'password'; 2.采用grant语句 e.g. gran ...
- [Architect] Abp 框架原理解析(3) DynamicFilters
本节目录 介绍 定义Filter 设置Filter 这是Abp中多租户.软删除.激活\禁用等如此方便的原因 Install-Package EntityFramework.DynamicFilters ...
- R语言简单聚类分析
#以R基础包自带的鸢尾花(Iris)数据进行聚类分析iris data <- iris[,:] #系统聚类法(层次聚类法) distance <- dist(data) #计算距离 iri ...
- Asp.NET MVC JSON序列化问题
最近在做项目的时候遇到一个JSON序列化问题. 环境:ASP.NET MVC 4.0 数据库:SQL 2008 在将获取的数据从后台以json的形式传给前台的easyui treegrid绑定的时候通 ...