您的位置:首页 > 产品设计 > UI/UE

UIDynamic简单总结

2015-12-21 21:33 387 查看
UIDynamic概述:

1、UIDynamic - UIKit动力学:在最需要引入逼真的交互设计时,使用UIKit动力学可以作为实现交互设计和现实的一种补充。

2、特点:将现实世界动力驱动的动画引入到UIKit;比如重力行为、碰撞行为、吸附行为、悬挂行为等。

3、UIDynamic三要素

3.1 UIDynamic Animator:动力学元素提供物理学相关的能力及动画,同时为这些元素提供相关的上下文,是动力学元素与底层iOS物理引擎之间的中介。将Behavior对象添加到Animator中即可实现动力学仿真。

3.2 UIDynamic Animator Item:动力学元素,是任何遵守UIDynamicItem协议的对象。iOS7.0开始,UIView和UICollectionViewLayoutAttributes默认实现该协议。

3.3 UIDynamicBehavior :动力学行为的父类。基本的动力学行为:UIGravityBehavior、UICollisionBehavior、UIAttachmentBehavior、UISnapBehavior、UIPushBehavior以及UIDynamicItemBehavior。均继承自UIDynamicBehavior类。

4、三个概念
(1)谁要进行物理仿真?

  物理仿真元素(Dynamic Item)

(2)执行怎样的物理仿真效果?怎样的动画效果?

  物理仿真行为(Dynamic Behavior)

(3)让物理仿真元素执行具体的物理仿真行为

  物理仿真器(Dynamic Animator)

重力行为

1、初始化仿真模拟器

//self.view是一个参照视图,表示物理仿真的范围
UIDynamicAnimator *_animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view];

2、初始化物理仿真元素

_item = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 50, 50)];
_item.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"box.png"]];

[self.view addSubview:_item];

3、初始化重力行为

UIGravityBehavior *gravity = [[UIGravityBehavior alloc] initWithItems:@[_item, _item1]];

//一定要将创建的行为添加到仿真模拟器中。
[_animator addBehavior:gravity];

碰撞行为

1、初始化仿真模拟器(同上)

2、初始化物理仿真元素(同上)

3、初始化碰撞行为

UICollisionBehavior *collision = [[UICollisionBehavior alloc] initWithItems:@[_item1]];

//指定是否启用参照系的边界
collision.translatesReferenceBoundsIntoBoundary = YES;

[_animator addBehavior:collision];

连接行为

1、初始化仿真模拟器(同上)

2、初始化物理仿真元素(同上)

3、初始化连接行为

3.1 初始化锚点坐标(设置锚点坐标随着触碰点移动)

CGPoint anchor = [touch locationInView:self.view];

3.2 创建连接行为

UIAttachmentBehavior *attachment = [[UIAttachmentBehavior alloc] initWithItem:_item attachedToAnchor:anchor];

3.3 设置连接的属性

attachment.length = 0; //设置连接点的长度

attachment.damping = .5; //设置衰减
attachment.frequency = 5; //设置震动频率

3.4 将创建的连接行为添加到仿真模拟器中

[_animator addBehavior:attachment];

附着行为

视图与锚点或者视图之间相连接而产生的动作行为;

两点之间连接状况,可模拟刚性或者弹性连接

可以实现多个物体的连接

1、初始化仿真模拟器(同上)

2、初始化物理仿真元素(同上)

3、初始化附着行为

3.1 设置锚点

UITouch *touch = [touches anyObject];

CGPoint point = [touch locationInView:self.view];

3.2 初始化附着行为

_snap = [[UISnapBehavior alloc] initWithItem:_item snapToPoint:point];

3.3 设置属性

_snap.damping = .5;

3.4 将附着行为添加到仿真模拟器

[_animator addBehavior:_snap];

附着行为是属性

1、attachedBehaviorType:连接类型

2、items:连接视图数组

3、anchorPoint:连接锚点

4、length:距离连接锚点的距离

连接一下两种属性即可弹性连接

1、damping:振幅衰减

2、frequency:振幅频率

push(推)行为

推行为:视图+作用力;作用力可以为持续力,也可以为一次性力

作用力的大小、方向、作用点均可以设置

属性:1、mode:推动类型 2、active:是否为激活状态(一次性推动需要激活) 3、angle:推动角度 4、magnitude:推动力量

1、初始化仿真模拟器(同上)

2、初始化物理仿真元素(同上)

3、初始化一个push行为

3.1 创建push行为

UIPushBehavior *push = [[UIPushBehavior alloc] initWithItems:@[_item1] mode:UIPushBehaviorModeInstantaneous];

3.2 若只是push一次的话需要设置它的激活状态(多次时不用)

push.active = YES;

3.3 设置push的力度,由于是2D的,所以用触摸点滑动的距离来模拟物理力度

CGFloat distance = sqrtf((powf(_endPoint.x - _beganPoint.x, 2) +powf(_endPoint.y - _beganPoint.y, 2)));

push.magnitude = distance/100;

3.4 将创建的push对象添加到仿真模拟器中

[_animator addBehavior:push];

UIDynamicItemBehavior 动力学元素行为

动力学元素行为:辅助行为

用来设置运动参与物理仿真过程的参数,如:弹性系数、摩擦系数、密度、阻力、角阻力以及是否允许旋转等;

属性

elasticity:弹性系数,决定碰撞弹性程度;

friction:摩擦系数,决定滑动时摩擦力的大小;

density:密度,与size结合使用,计算物体总的重量;

resistance:阻力,决定线性移动的阻力大小(区分摩擦系数)

angularResistance:角阻力,决定旋转运动阻力的大小

allowsRotation:还否允许旋转;

1、创建动力学元素行为

UIDynamicItemBehavior *itemBehavior = [[UIDynamicItemBehavior alloc] initWithItems:@[_item,_item1]];

2、设置属性

itemBehavior.resistance = 1;//阻尼系数

3、注意:所有的物理仿真行为 都需要加入到物理仿真模拟器中才能完成

[_animator addBehavior:itemBehavior];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: