编辑: hgtbkwd 2012-12-12

8 中重点强调了对重力相关元素的使用,用户操作重力相关的互动操作不需要再经过 锁屏界面了.在iOS

8 锁屏界面中,使用 UIGravityBehavior 函数可以实现向上拖动照相机图 标并在到达中点之前松开手指,使屏幕再次返回锁屏状态的功能.在之前的 iOS

7 版本中引 入UIKitDynamics 时,这一功能还只能通过手工撰写计时器和传统动画相结合的方式才能 实现. 下面的代码片段将在 frogImageView 视图中设置重力效果, 该视图是 self.view 的子视图. 首先为需要呈现动画的封闭视图创建一个新的 UIDynamicAnimator 对象,本例中呈现动画的 视图即 self.view.创建一个新的 UIGravityBehavior 对象并初始化,初始化数组为使用重力效 果的视图集合.设置本例中的重力行为参数:y 轴向下力度为 0.1.行为参数设置完成后,使用addBehavior:方法将其添加到 UIDynamicAnimator 对象. animator = [[UIDynamicAnimatoralloc] initWithReferenceView:self.view];

UIGravityBehavior* gravityBehavior = [[UIGravityBehavioralloc] ?initWithItems:@[frogImageView]];

精通 iOS 框架(第2版)

4 [gravityBeahviorsetXComponent:0.0f yComponent:0.1f];

[animatoraddBehavior:gravityBehavior];

注意 动态元素必须作为引用视图的子视图;

如果动态元素不是子视图, 动画对象就不会移动. UIKit Dynamics 使用自身的物理系统,苹果工程师将其戏称为 UIKit Newtons.虽然它同 标准的公式没有直接的关联, 苹果公司还是做到了非常近似的效果. 力度1.0 大致等于9.80655 m/s2 ,即地球的重力.要使用地球重力十分之一的力,也就是 0.1 的力度.在UIKit Dynamics 框架中使用重力效果不需要特别指定方向,默认就是向下的重力.如果 yComponent 参数为 负值,重力方向才是向上的.同样,重力可以指定为沿 X 轴.元素还有密度属性,我们会在 后面的 1.3.7 节中详细进行介绍. 运行重力效果示例代码, 结果是 imageView 视图以大约十分之一地球重力的速度滑落(如图1-2 所示),并且完全滑出了屏幕.这是因为我们没有设置边界或碰撞事件,对象并不知道 要碰到哪个边界才能停止运动,所以就一直滑落下去. 图1-2 带有重力效果的图片视图在重力效果示例中向下滑到屏幕底端 1.3.2 碰撞效果 上一节中介绍了重力,不过应用了重力的对象会从屏幕底端滑出并一直无限地滑下去. 这是因为我们没有在对象下降过程中设置碰撞点来阻止它. 我们对上一个示例程序进行修改, 对封闭视图添加碰撞边界, 同时添加第二个图片对象. 碰撞示例的开始部分同重力示例一样,不过这里使用了两个图片视图. 第1章UIKit Dynamics

5 创建 UICollisionBehavior 对象的过程同创建 UIGravityBehavior 对象的过程类似.对象通 过将要应用效果的一些 UIView 视图进行初始化,本例中即两个 UIImageViews.除了视图之 外, 碰撞行为还需要在以下三个值中指定一个值作为参数: 使用 UICollisionBehaviorModeItems 参数会使元素相互碰撞;

使用 UICollisionBehaviorModeBoundaries 参数,元素虽然不会发生 碰撞,但是会和边界发生碰撞;

使用 UICollisionBehaviorModeEverything 参数会使元素在相 互之间和同边界都发生碰撞. 要想程序中的对象和边界发生互动关系,需要先对边界进行定义.最简单的定义方法就 是通过在 UICollisionBehavior 对象上设置一个称为 translatesReferenceBoundsIntoBoundary 的 布尔值参数,在示例中我们将其用于 self.view 对象.边界也可以被设置为遵循某种路径,使用addBoundaryWithIdentifier:forPath:方法使其遵循 NSBezierPath 表示的路径,或者使用 addBoundaryWithIdentifier:fromPoint:toPoint:方法使其遵循基于两个点表示的路径. animator = [[UIDynamicAnimatoralloc] initWithReferenceView:self.view];

下载(注:源文件不在本站服务器,都将跳转到源网站下载)
备用下载
发帖评论
相关话题
发布一个新话题