UIKit Dynamics

在介绍iOS7中苹果已经说得很清楚了,他们致力于设备和现实生活的交互行为。一个被介绍的新的API是UIKit Dynamics -- 一个在UIkit框架下的二维物理现象发动机。

为了模拟现实生活中的物理现象我们使用UIDynamicBehavior子类,这些子类适用接受UIDynamicItem协议对象的不同行为。很多行为的了例子包括:gravity(重力), collisions(碰撞) and springs(弹簧)。虽然你可以自己子类化接受UIDynamicItem协议的对象,但是很显然UIView已经自己做了。UIDynamicBehavior 对象们可以复合在一起形成一个特定的行为对象,这个行为对象有着这些对象的各种行为。

一旦我们指定给我们的dynamic 对象一些特定的行为,我们可以为它创造一个UIDynamicAnimator实例--物理引擎。这玩意计算决定着不同的对象应该如何展现他们的行为。下面的这图宏观的概述了UIKit Dynamics原理世界:

图1.1

建立一个钟摆实验

让我们回顾一下高中的学科---在牛顿物理学中,一个最简单的项目就是钟摆实验了。现在就让我们利用视图来呈现球的摇摆吧。

图1.2

现在我们能给找这球加上些有趣的行为了.我们能够创造一个对象来复合多种行为:

图1.3

接下来我们将添加一系列我们想要模拟的行为 --首先就是地球引力了:

图1.4

UIGravityBehavior 呈现出一个物体和地球之间的万有引力。这个类有很多属性让你能够描述万有引力手里的矢量(包括大小和方向)。现在我们加大这个力的大小并保持在y的方向增长。另一个行为我们需要加小球上的是一个附属行为 -- 用一根线把它给挂住:

图1.5

UIAttachmentBehavior实例对象依附一个锚点或者另外一个物体。他有属性可以控制附加线的行为--(可以指定)频率,阻尼,线长。默认值保证了一个完整且严格的附加行为,这正是我们钟摆实验所希望的。

现在小球所有的行为都被指定了我们可以创造一个物理引擎UIDynamicAnimator的对象_animator:

图1.6

UIDynamicAnimator提供了模拟这个实验的物理引擎。这里我们创造它并指定相关联的视图(比如空间宇宙)然后添加我们刚刚创造的复合型行为。

刚刚做的这些我们就建立了我们第一个UIKit Dynamics系统。然而,你现在去跑这个工程,啥都不会发生。这是因为这个系统开始在一个平衡的状态下--我们应该去打扰这个平衡状态,让它动起来。

手势驱动行为

我们需要为小球添加一个手势这样用户就可以做这个实验了。


图1.7

在这个手势响应方法里面我们施加一个恒力行为在小球上

图1.8

UIPushBehavior 对物体施加一个线性的力。当我们手势响应开始,我们创造UIPushBehavior的对象_userDragBehavior,记住把它加在_animator上。为了水平方向速度的转移,我们需要设置合适力的大小。为了使这个摆钟摇摆,在手势结束的时候我们移除_userDragBehavior对象。

目前为止这个实验看起来是这样的:


gif-1.1

包含多个摇摆小球

牛顿的实验的是一个布置好的多个摇摆小球,这样这些小球几乎都是接触的。

图1.9

为了创造这个UIKit Dynamics我们需要创造多个摇摆小球 - 就和上面我们创造的模式一样的。他们应该被好好放置确保没有完全接触。

我们也需要添加一个新的行为来描述他们之间是如何碰撞的。现在我们需要一个储存小球的数组NSArray *_ballBearings;:

图1.20

我们使用了一种碰撞行为和一系列对象来模拟这个实验。碰撞行为还可以用于模拟对象达到边界如视图边界,或任意的贝塞尔曲线路径的界限。

如果你现在运行工程,你试着去移动某个摇摆小球你会发现这个装置并没有出现你想要的结果。因为目前来说这些碰撞并不是弹性的。我们需要添加一种特殊类型的动态行为来指定不同的共享属性:

图1.21

我们使用UIDynamicItemBehavior 来指定碰撞的弹性,阻力(大多是空气阻力)还有旋转。如果我们允许旋转我们可以指定角阻力。UIDynamicItemBehavior还允许设置线速度和角速度,这对匹配 速度时 的手势是非常有用的。

再次运行工程的时候这个牛顿摇摆装置就和现实生活的实验表现的一样了。作为扩展,你可以去画一下连接小球儿和钟摆之间的线。

图1.22

伴随着这篇文章的代码代表了牛顿的摇篮项目完成。它使用了上面所有被提到的类和对象,但也只是在这个工程里面做了浅薄的探索。

结论

这篇文章介绍UIKit Dynamics还是远远不够的--这些模块可以为非常复杂的物件系统建模。这为那些深受现实生活对世界的运动和对象交互固有理解的APP打开了一扇门

github地址:github.com/ShinobiControls/iOS7-day-by-day

原文地址 :https://www.shinobicontrols.com/blog/ios7-day-by-day-day-0-uikit-dynamics

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342

推荐阅读更多精彩内容