iOS7新特征汇总[05]初窥UIKit动力(UIKit Dynamics)
2013-08-30 12:57
435 查看
本文转载自:破船之家
本文地址:iOS7新特征汇总[05]初窥UIKit动力(UIKit Dynamics)
QQ20130615-6
此图来此WWDC视频
通过之前的4篇文章,笔者把iOS7中的涉及到的一些新特征做了一个简单的介绍。本文将带领大家初窥新特征里面的一个topic:UIKit动力(UIKit Dynamics)。
注1:关于UIKit Dynamics的中文名称:我在这里叫做UIKit动力,也有人叫UIKit动力模型和UIKit动态,总感觉怪怪的——所以大家在看到的时候不要在意即可。
注2:今天有开发者提起iOS7 beta还处于苹果的NDA(Non-Disclosure Agreement)状态,也就是说目前关于iOS7 beta的任何内容除了官方公开发表的信息外,作为开发者最多只能在苹果的开发者论坛上进行讨论交流,禁止在公开场合谈论关于iOS7
beta的信息。关于NDA感觉国外的意识比较好,就跟版权意识一样。由此笔者也在这里友情提醒一下:读者单纯的看本系列文章即可,在iOS7 release之前,保持沉默状态。
注3:本文在写作的时候参考了如下一些内容(具体内容请登录苹果开发者网站查阅):
WWDC 2013 session 206 — Getting Started with UIKit Dynamics
UIDynamicAnimator Class Reference
UIDynamicAnimatorDelegate Protocol Reference
UIDynamicBehavior Class Reference
UIDynamicItem Protocol Reference
UIDynamicItemBehavior Class Reference
UIKit Dynamics Catalog(Sample Code)
QQ20130615-5
code
什么是UIKit动力?—— 一句话:UIKit动力提供了一个模拟真实世界中力学相关的动画和交互系统。比如重力、碰撞和吸附等。UIKit动力具有可组合、可重用和声明式的特点。
在程序中利用UIKit提供的接口来实现力学行为,可以减少80%的代码量。
QQ20130616-8
如上图所示,UIKit动力系统中,涉及到如下4个内容:
QQ20130616-9UIDynamicAnimator:UIDynamicAnimator介于iOS图形引擎和动力项(View)之间,具有如下功效:
提供动力行为的上下文
根据ref view确定坐标系
控制动力引擎
维护着动力行为的状态
UIDynamicAnimatorDelegate是与UIDynamicAnimator相关的一个delegate。主要用于动力行为被启动或者暂定时,做出的回应。也就是说,在动力行为运行期间,有两个事件(启动和暂定)可供我们使用。
QQ20130616-10UIDynamicBehavior:主要用来描述动力的行为。在iOS7中,默认提供了如下动力行为:
UIAttachmentBehavior
UICollisionBehavior
UIDynamicItemBehavior
UIGravityBehavior
UIPushBehavior
UISnapBehavior objects
动力行为可以在任意时间内进行添加或移除。另外动力行为可以是组合的,也可以被继承。
注意:这些动力行为是在二维空间进行的。
Reference View:该用是用来初始化Animator用的,它的作用是给动力行为提供坐标系。
View:在UIKit动力中,又称为动力项(dynamic item)。动力项是遵循UIDynamicItem协议的任意对象(可以是SDK中默认提供的,或者开发者自定义的)。在iOS7 beta中,View已经遵循了该协议,所以一般也会将View当做动力项——动力行为实际针对的对象。
下面笔者就通过一个例子,演示如何对一个view施加重力行为(UIGravityBehavior)。
上面介绍了一大堆,实际使用过程可能没那么复杂,不过原理才是最重要的。
新建一个Single View Application模板工程:BVGravityBehavior,在工程中,有如下属性:
另外还有两个方法:
运行程序,效果如下(如图没看到gif动画效果,点击下图,在新窗口中可以看到效果):
1
也可以停止当前的动力行为:在重力行为运行过程中,如果点击停止,就可以停止重力行为,view的状态为停止前的状态。
2
代码下载
本文地址:iOS7新特征汇总[05]初窥UIKit动力(UIKit Dynamics)
QQ20130615-6
此图来此WWDC视频
小引
通过之前的4篇文章,笔者把iOS7中的涉及到的一些新特征做了一个简单的介绍。本文将带领大家初窥新特征里面的一个topic:UIKit动力(UIKit Dynamics)。注1:关于UIKit Dynamics的中文名称:我在这里叫做UIKit动力,也有人叫UIKit动力模型和UIKit动态,总感觉怪怪的——所以大家在看到的时候不要在意即可。
注2:今天有开发者提起iOS7 beta还处于苹果的NDA(Non-Disclosure Agreement)状态,也就是说目前关于iOS7 beta的任何内容除了官方公开发表的信息外,作为开发者最多只能在苹果的开发者论坛上进行讨论交流,禁止在公开场合谈论关于iOS7
beta的信息。关于NDA感觉国外的意识比较好,就跟版权意识一样。由此笔者也在这里友情提醒一下:读者单纯的看本系列文章即可,在iOS7 release之前,保持沉默状态。
注3:本文在写作的时候参考了如下一些内容(具体内容请登录苹果开发者网站查阅):
WWDC 2013 session 206 — Getting Started with UIKit Dynamics
UIDynamicAnimator Class Reference
UIDynamicAnimatorDelegate Protocol Reference
UIDynamicBehavior Class Reference
UIDynamicItem Protocol Reference
UIDynamicItemBehavior Class Reference
UIKit Dynamics Catalog(Sample Code)
UIKit动力简介
QQ20130615-5
code
什么是UIKit动力?—— 一句话:UIKit动力提供了一个模拟真实世界中力学相关的动画和交互系统。比如重力、碰撞和吸附等。UIKit动力具有可组合、可重用和声明式的特点。
在程序中利用UIKit提供的接口来实现力学行为,可以减少80%的代码量。
UIKit动力架构
QQ20130616-8
如上图所示,UIKit动力系统中,涉及到如下4个内容:
QQ20130616-9UIDynamicAnimator:UIDynamicAnimator介于iOS图形引擎和动力项(View)之间,具有如下功效:
提供动力行为的上下文
根据ref view确定坐标系
控制动力引擎
维护着动力行为的状态
UIDynamicAnimatorDelegate是与UIDynamicAnimator相关的一个delegate。主要用于动力行为被启动或者暂定时,做出的回应。也就是说,在动力行为运行期间,有两个事件(启动和暂定)可供我们使用。
QQ20130616-10UIDynamicBehavior:主要用来描述动力的行为。在iOS7中,默认提供了如下动力行为:
UIAttachmentBehavior
UICollisionBehavior
UIDynamicItemBehavior
UIGravityBehavior
UIPushBehavior
UISnapBehavior objects
动力行为可以在任意时间内进行添加或移除。另外动力行为可以是组合的,也可以被继承。
注意:这些动力行为是在二维空间进行的。
Reference View:该用是用来初始化Animator用的,它的作用是给动力行为提供坐标系。
View:在UIKit动力中,又称为动力项(dynamic item)。动力项是遵循UIDynamicItem协议的任意对象(可以是SDK中默认提供的,或者开发者自定义的)。在iOS7 beta中,View已经遵循了该协议,所以一般也会将View当做动力项——动力行为实际针对的对象。
代码示例
下面笔者就通过一个例子,演示如何对一个view施加重力行为(UIGravityBehavior)。上面介绍了一大堆,实际使用过程可能没那么复杂,不过原理才是最重要的。
新建一个Single View Application模板工程:BVGravityBehavior,在工程中,有如下属性:
@property (nonatomic, weak) IBOutlet UIImageView *square1; @property (nonatomic) UIDynamicAnimator* animator;
另外还有两个方法:
// 开始重力行为 - (IBAction)startGravity:(id)sender { self.animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view]; UIGravityBehavior* gravityBeahvior = [[UIGravityBehavior alloc] initWithItems:@[self.square1]]; [self.animator addBehavior:gravityBeahvior]; }
// 停止重力行为 - (IBAction)stopGravity:(id)sender { [self.animator removeAllBehaviors]; }
运行程序,效果如下(如图没看到gif动画效果,点击下图,在新窗口中可以看到效果):
1
也可以停止当前的动力行为:在重力行为运行过程中,如果点击停止,就可以停止重力行为,view的状态为停止前的状态。
2
代码下载
代码下载
相关文章推荐
- iOS7新特征汇总[05]初窥UIKit动力(UIKit Dynamics)
- iOS7新特征汇总[05]初窥UIKit动力(UIKit Dynamics)
- iOS7新特征汇总[05]初窥UIKit动力(UIKit Dynamics)
- iOS7新特征汇总[05]初窥UIKit动力(UIKit Dynamics)
- iOS7新特征汇总[05]:初窥UIKit Dynamics
- iOS7新特征汇总[05]:初窥UIKit Dynamics
- iOS7新特征汇总[04]:Framework的改进、Objective-C和已经过时的API
- iOS7新特征汇总[01]新特征介绍1
- iOS7新特征汇总
- iOS7新特征汇总[01]新特征介绍1
- iOS7新特征汇总[01]:UI和多任务增强
- iOS7新特征汇总[03]新特征介绍3
- iOS7新特征汇总[02]新特征介绍2
- iOS7新特征汇总[04]新特征介绍4
- iOS7新特征汇总[03]新特征介绍3
- iOS7新特征汇总[02]:游戏、地图以及AirDrop
- (转自cocoachina)iOS7新特征汇总[01]:UI和多任务增强
- iOS7新特征汇总[04]新特征介绍4
- 如何在iOS7中使用UIKit动力之UICollisionBehavior
- iOS7新特征汇总[01]新特征介绍1