UIKit Dynamics (二) 重力
2017-05-09 本文已影响69人
bewils
UIKit Dynamics (一) 概述
UIKit Dynamics (二) 重力
UIKit Dynamics (三) 碰撞
UIKit Dynamics (四) 急停
UIKit Dynamics (五) 施力
在这个系列的第二篇文章中主要讨论最简单的重力效果。
UIGravityBehavior
这个类提供了模拟重力的效果,可以通过修改大小和方向来实现不同的重力效果。物理学中的重力加速度是 9.80665 m/s2,而 UIKit 中将这个加速度进行了转换以适应屏幕像素的计算,在 UIKit 中的重力加速的是 1000 points/second2。默认的方向是 UIKit 坐标系的下方向,方向向量是 (0.0, 1.0)。
使用
利用这个类通过几行代码就可以非常方便地实现模拟重力的效果。
_box.frame = CGRectMake(10, 10, 100, 100);
_container.clipsToBounds = YES;
// 创建 animator 动画效果的容器
_animator = [[UIDynamicAnimator alloc] initWithReferenceView:_container];
// 创建重力效果,并将 _box 添加进来使 _box 遵循重力规则
_gBehavior = [[UIGravityBehavior alloc] initWithItems:@[_box]];
[_animator addBehavior:_gBehavior];
配置
UIGravityBehavior 主要有一下属性和方法:
// 重力向量方向,默认 (0.0, 1.0)
@property (readwrite, nonatomic) CGVector gravityDirection;
// 重力弧度方向,默认 M_PI_2
@property (readwrite, nonatomic) CGFloat angle;
// 重力大小,默认 1,即 1000 points/second^2
@property (readwrite, nonatomic) CGFloat magnitude;
// 同时设置上面两个属性
- (void)setAngle:(CGFloat)angle magnitude:(CGFloat)magnitude;
本文的 demo 是 UIGravityBehavior 页面。可以通过拖拽项目中的滑块来调节重力的角度和大小,取值分别为 0~2*PI 和 1~11,来尝试各种不同的效果。
Gravity Behavior