- 浏览: 1037396 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
繁星水:
Useful!!
Object-C之(Null)与(Bool) -
pacer123:
请问注解@ApiModelProperty 在哪个jar包下面 ...
Micro Service工具集之Swagger:可测试的样式化API文档 -
sucheng2016:
这东东真的好用么/
对象转换利器之Dozer -
zzq0324:
http://git.oschina.net/zzq0324/ ...
基于Spring-WS的Restful API的集成测试 -
lrz0534:
你好,我在maven上面下载了swagger-springmv ...
Micro Service工具集之Swagger:可测试的样式化API文档
所谓动画效果,就是会动的画,到iOS App中来说的话,就是各种UIView的移动。 想想看,如果我们自己来实现所有UIView的动画效果,需要考虑些什么东西呢?
* 该UIView现在在哪儿?
* 该UIView最后会动到哪儿?
* 该UIView以什么样的方式移动到那儿?
* 该动画持续多长时间?
* 每次移动的最小时间间隔?
* 每次最小时间间隔的移动的应该移动到哪儿?
* ….
想想这是一个多么杀脑细胞的过程,尤其是每一次的动画过程都要重复这一折磨的过程。
还好,现实比想象的美好, 苹果公司为开发者思考了上面的问题,通过使用UIKit提供的动画支持,开发者只需要简单的几行代码就能实现各种各样的动画效果。在UIKit中,所有的动画效果支持的方法都在UIView类中。
首先,在UIView中有很多属性用以描述一个UIView的状态,而动画就是让UIView从一个状态平滑的过渡到另外一个状态的过程。这些属性有:
通过设置这些属性,基本上就解决了动画中的移动到哪儿的问题。
接着,苹果公司在UIView中加入很多方法来方便家控制动画的移动时间,以及移动的方式。iOS3.0及之前,UIView支持的Animation方法有如下这么多:
这些方法非常的不直观,开发者还是需要花很多时间去思考怎么组合这些方法。但是自从iOS4.0提供块语法支持之后,苹果公司把动画效果的实现封装了一下,效果立杆见影,直观了许多,因此大家完全可以不用去看上面的那些方法,重点关注如下的方法:
上面的几个方法从名字上看就非常直观。前三个方法都可以按如下的方式直译,只是后两个使用了一些默认参数而已:
有了这3个方法,开发者只需要思考,初始值,结果值,持续时间,运行方式就行了,具体的细节移动都交给类库。
后2个方法是用于UIView相互之间转换的,个人觉得用处不大,因为用上面的三个方法同样可以做到这些效果,因此略过。
关于UIView的动画效果支持,有2点值得一提
* 上面所有的方法都是类方法,当调用这些方法之后,系统会新起线程执行动画效果,不会阻塞主线程的执行。
* UIView的Animation效果只支持一些简单的2D动画效果,复杂的大家还得研究Core Animation。
一个实战例子
在我写的一个小游戏的主机界面中,我使用了一点动画的效果,主界面的设计图如下:
动画后的效果图如下:
我想要的效果就是,加载主界面后,图片缓缓的展开成扇形,然后游戏的菜单显示供玩家点击。
代码如下:
首先,准备动画前状态,让想展示的UIView不可见:
然后,展示动画效果:
另外,动画效果还可以使用completion的回调块做连接,完成多个动画效果的连接。
* 该UIView现在在哪儿?
* 该UIView最后会动到哪儿?
* 该UIView以什么样的方式移动到那儿?
* 该动画持续多长时间?
* 每次移动的最小时间间隔?
* 每次最小时间间隔的移动的应该移动到哪儿?
* ….
想想这是一个多么杀脑细胞的过程,尤其是每一次的动画过程都要重复这一折磨的过程。
还好,现实比想象的美好, 苹果公司为开发者思考了上面的问题,通过使用UIKit提供的动画支持,开发者只需要简单的几行代码就能实现各种各样的动画效果。在UIKit中,所有的动画效果支持的方法都在UIView类中。
首先,在UIView中有很多属性用以描述一个UIView的状态,而动画就是让UIView从一个状态平滑的过渡到另外一个状态的过程。这些属性有:
属性名 | 作用 |
frame | 控制UIView的大小和该UIView在superview中的相对位置。 |
bounds | 控制UIView的大小 |
center | 控制UIView的位置 |
transform | 控制UIView的缩放,旋转角度等固定好中心位置之后的变化 |
alpha | 控制UIView的透明度 |
backgroundColor | 控制UIView的背景色 |
contentStretch | 控制UIView的拉伸方式 |
通过设置这些属性,基本上就解决了动画中的移动到哪儿的问题。
接着,苹果公司在UIView中加入很多方法来方便家控制动画的移动时间,以及移动的方式。iOS3.0及之前,UIView支持的Animation方法有如下这么多:
@interface UIView(UIViewAnimation) + (void)beginAnimations:(NSString *)animationID context:(void *)context; // additional context info passed to will start/did stop selectors. begin/commit can be nested + (void)commitAnimations; // starts up any animations when the top level animation is commited // no getters. if called outside animation block, these setters have no effect. + (void)setAnimationDelegate:(id)delegate; // default = nil + (void)setAnimationWillStartSelector:(SEL)selector; // default = NULL. -animationWillStart:(NSString *)animationID context:(void *)context + (void)setAnimationDidStopSelector:(SEL)selector; // default = NULL. -animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context + (void)setAnimationDuration:(NSTimeInterval)duration; // default = 0.2 + (void)setAnimationDelay:(NSTimeInterval)delay; // default = 0.0 + (void)setAnimationStartDate:(NSDate *)startDate; // default = now ([NSDate date]) + (void)setAnimationCurve:(UIViewAnimationCurve)curve; // default = UIViewAnimationCurveEaseInOut + (void)setAnimationRepeatCount:(float)repeatCount; // default = 0.0. May be fractional + (void)setAnimationRepeatAutoreverses:(BOOL)repeatAutoreverses; // default = NO. used if repeat count is non-zero + (void)setAnimationBeginsFromCurrentState:(BOOL)fromCurrentState; // default = NO. If YES, the current view position is always used for new animations -- allowing animations to "pile up" on each other. Otherwise, the last end state is used for the animation (the default). + (void)setAnimationTransition:(UIViewAnimationTransition)transition forView:(UIView *)view cache:(BOOL)cache; // current limitation - only one per begin/commit block + (void)setAnimationsEnabled:(BOOL)enabled; // ignore any attribute changes while set. + (BOOL)areAnimationsEnabled; @end
这些方法非常的不直观,开发者还是需要花很多时间去思考怎么组合这些方法。但是自从iOS4.0提供块语法支持之后,苹果公司把动画效果的实现封装了一下,效果立杆见影,直观了许多,因此大家完全可以不用去看上面的那些方法,重点关注如下的方法:
@interface UIView(UIViewAnimationWithBlocks) + (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion; + (void)animateWithDuration:(NSTimeInterval)duration animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion NS_AVAILABLE_IOS(4_0); // delay = 0.0, options = 0 + (void)animateWithDuration:(NSTimeInterval)duration animations:(void (^)(void))animations NS_AVAILABLE_IOS(4_0); // delay = 0.0, options = 0, completion = NULL + (void)transitionWithView:(UIView *)view duration:(NSTimeIntervl)duration options:(UIViewAnimationOptins)options animations:(void (^)(void)animations completion:(void (^)(BOOL finished) completion NS_AVAILABLE_IOS(4_0); + (void)transitionFromView:(UIView *)fromView toView:(UIView *)toView duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options completion:(void (^)(BOOL finished))completion NS_AVAILABLE_IOS(4_0); // toView added to fromView.superview, fromView removed from its superview @end
上面的几个方法从名字上看就非常直观。前三个方法都可以按如下的方式直译,只是后两个使用了一些默认参数而已:
做一个动画效果,持续时间为duration, 延迟delay秒开始执行 , 以options指定的方式运行这个动画, animations块中指定哪些UIView会参加本次动画效果,以及动画效果完成时这些UIView会是一个什么状态, 动画完成之后,执行completion块进行收尾。
有了这3个方法,开发者只需要思考,初始值,结果值,持续时间,运行方式就行了,具体的细节移动都交给类库。
后2个方法是用于UIView相互之间转换的,个人觉得用处不大,因为用上面的三个方法同样可以做到这些效果,因此略过。
关于UIView的动画效果支持,有2点值得一提
* 上面所有的方法都是类方法,当调用这些方法之后,系统会新起线程执行动画效果,不会阻塞主线程的执行。
* UIView的Animation效果只支持一些简单的2D动画效果,复杂的大家还得研究Core Animation。
一个实战例子
在我写的一个小游戏的主机界面中,我使用了一点动画的效果,主界面的设计图如下:
动画后的效果图如下:
我想要的效果就是,加载主界面后,图片缓缓的展开成扇形,然后游戏的菜单显示供玩家点击。
代码如下:
首先,准备动画前状态,让想展示的UIView不可见:
-(void) prepareForIntroAnimation { self.sImageView.hidden=YES; self.nImageView.hidden=YES; self.aImageView.hidden=YES; self.pImageView.hidden=YES; self.jokerImageView.hidden=YES; self.hostGameButton.alpha=0.0f; self.joinGameButton.alpha=0.0f; self.singlePlayerGameButton.alpha=0.0f; self.helpButton.alpha=0.0f; _buttonsEnabled = NO; }
然后,展示动画效果:
-(void) performAnimation { //显示UIView self.sImageView.hidden=NO; self.nImageView.hidden=NO; self.aImageView.hidden=NO; self.pImageView.hidden=NO; self.jokerImageView.hidden=NO; [UIView animateWithDuration:0.65f delay:0.5f options:UIViewAnimationOptionCurveEaseIn animations:^ { //确定UIView的的中心位置和偏转角度 self.sImageView.center = CGPointMake(80.0f, 108.0f); self.sImageView.transform = CGAffineTransformMakeRotation(-0.22f); self.nImageView.center = CGPointMake(160.0f, 93.0f); self.nImageView.transform = CGAffineTransformMakeRotation(-0.1f); self.aImageView.center = CGPointMake(240.0f, 88.0f); self.pImageView.center = CGPointMake(320.0f, 93.0f); self.pImageView.transform = CGAffineTransformMakeRotation(0.1f); self.jokerImageView.center = CGPointMake(400.0f, 108.0f); self.jokerImageView.transform = CGAffineTransformMakeRotation(0.22f); } completion:nil]; [UIView animateWithDuration:0.5f delay:1.0f options:UIViewAnimationOptionCurveEaseOut animations:^ { //透明度设置为1,显示游戏菜单。 self.hostGameButton.alpha = 1.0f; self.joinGameButton.alpha = 1.0f; self.singlePlayerGameButton.alpha = 1.0f; self.helpButton.alpha = 1.0f; } completion:^(BOOL finished) { _buttonsEnabled = YES; }]; }
另外,动画效果还可以使用completion的回调块做连接,完成多个动画效果的连接。
发表评论
-
Xcode的代码结构管理
2015-07-21 22:34 2787Merge Conflicts on .project fil ... -
记Protocol Oriented Programming in Swift of WWDC 2015
2015-07-12 20:28 1840其实最先朋友让我就这个题目写篇文章的时候,我是拒绝的,因为觉得 ... -
你应该知道的Core Animation知识
2015-06-07 00:04 1325分享最近读的一本书:https://github.com/At ... -
iOS7之定制View Controller切换效果
2014-04-18 23:19 38439在iOS5和iOS6前,View Controller的切换主 ... -
Object-C之(Null)与(Bool)
2014-04-05 14:08 9137在写iOS程序的时候,想初始化一个空值的时候,经常会迷茫到底是 ... -
iOS之Local Notification(本地通知)·
2014-03-23 21:31 19530Local Notification的作用 Local Not ... -
实战iOS7之后台多任务
2014-02-08 20:20 15279在WWDC2013中 水果公司把iOS7的中后台多任务单独开出 ... -
实战iOS7之NSURLSession
2014-02-01 20:19 30712NSURLSession VS NSURLConnection ... -
iOS概念之KVO(Key-Value Observing)
2014-01-26 20:21 21807在一个复杂的,有状态的系统中,当一个对象的状态发生改变,如何通 ... -
实战iOS7之UIDynamics
2014-01-26 14:26 10495最近在看Sam Davies写的iOS7系列文章(http:/ ... -
在iOS App的图标上显示版本信息
2013-12-29 19:46 5638最近读到一篇文章(http://www.merowing.in ... -
构建iOS持续集成平台
2013-09-25 20:33 5444之前写的关于iOS持续集成平台的文章终于在infoQ上发表了, ... -
Object-C的对象模型
2013-09-17 20:04 2441在Object-C的类型结构中,有几个比较重要的概念Objec ... -
使用AVAudioRecorder,AVAudioPlayer构建简单录音笔应用
2013-07-12 05:57 16952在iOS的基础类库中, 提供了AVFoundation Fra ... -
iOS使用GameKit构建“Master-Client”网络
2013-07-02 20:34 2137GameKit是iOS SDK中一个常用的框架。其核心功能有3 ... -
Object-C中的块(Block)
2013-06-26 20:22 9238在Object-C中,块的概念 ... -
Object-C动态特性之protocol
2013-06-25 16:11 8616在Object-C中,Protocol被用来定义一组独立于具体 ... -
Object-C中的动态特性Category
2013-06-22 08:41 1732刚接触Object-C哪会儿, ... -
统一iOS客户端和服务器端认证
2013-01-18 21:05 3405最近公司的同事业余时间搞了一个内部的类about. ... -
iOS开发随笔记之 常量声明和NSUserDefaults
2012-12-09 14:19 5086在iOS中,常量声明一般使用2种方式 1、使用C语言的预处理方 ...
相关推荐
在本教程中,我们将深入探讨如何使用`UIView`的`animation`方法来创建简单的上、中、下移动动画效果。这涉及到iOS开发中的基本动画原理,以及如何通过代码控制视图的行为。 首先,我们要理解`UIView`动画的基本概念...
本文将深入探讨如何使用UICircularSlider,并结合UIView+Animation进行几个简单的动画操作,以增强用户界面的动态感。 首先,UICircularSlider是基于UIView的自定义视图,它通过重绘视图来实现圆形的滑动条。它的...
在iOS开发中,实现视图(UIView)或控制器(UIViewController)的缩放动画效果是常见的交互设计,可以增强用户体验并使界面更具动态美感。这里我们将深入探讨如何在iOS应用中创建这种效果,以及如何通过自定义Dome...
- `UIView`与Core Animation的`CALayer`紧密合作。每个`UIView`都有一个对应的`CALayer`,负责实际的渲染和动画。Core Animation层对象可以缓存视图的绘制结果,提高性能,并支持复杂的动画效果。 7. **视图层次与...
首先,弹簧效果(Spring Animation)是UIKit提供的动画类型之一,它模拟了真实世界中的物理运动,如弹簧的弹性振动,使得动画更加自然和生动。这种效果是通过`CADisplayLink`或`CAAnimation`中的`CABasicAnimation`...
本示例“iOS中UIView的翻页动画demo”旨在演示如何为UIView实现逼真的翻页效果,让用户体验如同翻阅实体书页一样的平滑过渡。在实际应用中,这种动画效果通常用于电子书籍、杂志应用或任何需要模拟页面翻动的地方。 ...
2. UIKit Animation:基于Core Animation之上,UIKit提供了一些简便的API,如`UIView`的`animateWithDuration:`系列方法,适合快速创建简单的视图动画。 二、创建基本动画 1. UIView动画:通过`UIView`的`...
"swift-Fireworks-为UIView添加烟花动画效果"这个项目就是这样一个例子,它展示了如何在Swift中创建逼真的烟花绽放效果。 首先,我们需要了解`UIView`的基本概念。`UIView`是iOS应用中可视化元素的基础,它可以包含...
同时,如果需要动画效果,可以使用Core Animation来平滑过渡。 标签中的"Swift开发-进度条视图"表明这个知识点主要关注的是在Swift环境中如何创建和使用进度条。在实际应用中,进度条视图可以是线性(如iOS系统自带...
`UIView`动画是基于`Core Animation`框架的简化版本,它提供了便捷的方法来创建基本的过渡效果,如移动、缩放、旋转等。在`UIView`动画中,我们通常使用`animateWithDuration:`方法或者`UIViewPropertyAnimator`类来...
Core Animation是iOS开发中用于创建丰富视觉效果的关键技术,它为开发者提供了强大的工具来实现平滑、高性能的2D和3D图形动画。这个“Core Animation动画例子”压缩包很可能是包含了一些示例代码,帮助开发者理解...
本文将深入探讨两种主要的动画实现方式:基于Core Animation的CAAnimation和基于UIView的动画。这两种方法各有特点,适用于不同的场景。 首先,我们来看CAAnimation。CAAnimation是Core Animation框架的核心类,它...
将闪光效果应用于iOS应用程序的任何视图及其子视图的超级简单方法。要求iOS 10以上安装可可豆UIView-Shimmer可通过。 要安装它,只需将以下行添加到您的Podfile中: pod 'UIView-Shimmer' , '~> 1.0' 然后导入 ...
Core Animation是iOS开发中一个强大的框架,用于创建各种丰富的视觉效果和动画。它不仅限于基本的移动和变换,还能实现复杂的2D和3D图形渲染。本教程将引导初学者掌握Core Animation的核心概念和使用技巧,从而在iOS...
7. **动画支持**:提供一些动画效果的快捷实现,比如淡入淡出、旋转、缩放等,让开发者无需深入研究Core Animation就能实现复杂的视图动画。 8. **视图层次操作**:包括添加子视图、移除子视图、查找视图等便捷方法...
iOS Core Animation是苹果公司为iOS设备提供的一个强大的动画框架,它是UIKit框架的一部分,可以用来创建流畅且丰富的视觉效果。本文将从iOS Core Animation的基础知识讲起,逐步深入探讨其中的核心概念、高级技术和...
Core Animation 提供了多种方式来实现动画效果,其中最基本的是通过修改图层的属性来达到动画的效果。主要有以下几种类型的动画: - **基本动画(Basic Animations)**:针对单个属性的动画,例如平移、旋转、缩放...
`UIView`动画是苹果提供的一种简单而强大的方式,用于在用户界面上创建动态效果。本主题将深入探讨如何在Xcode 6环境下,针对simulator-iPhone 6设备使用`UIView`动画。 首先,`UIView`动画是基于Core Animation...
本文将深入探讨如何使用Swift来定制一个名为SnapTimer的UIView,以模仿Snapchat应用程序中的stories定时器效果。这个效果通常用于显示用户在拍摄或录制故事时剩余的时间。 首先,SnapTimer的核心是通过Core ...