nUIDynamic
 
n什么是UIDynamic
pUIDynamic是从iOS 7开始引入的一种新技术,隶属于UIKit框架
p可以认为是一种物理引擎,能模拟和仿真现实生活中的物理现象
ü重力、弹性碰撞等现象
ü
n物理引擎的价值
p广泛用于游戏开发,经典成功案例是“愤怒的小鸟”
p让开发人员可以在远离物理学公式的情况下,实现炫酷的物理仿真效果
p提高了游戏开发效率,产生更多优秀好玩的物理仿真游戏
p
n知名的2D物理引擎
pBox2d
pChipmunk
n使用步骤
n要想使用UIDynamic来实现物理仿真效果,大致的步骤如下
p创建一个物理仿真器(顺便设置仿真范围)
p
p创建相应的物理仿真行为(顺便添加物理仿真元素)
p
p将物理仿真行为添加到物理仿真器中 à 开始仿真
n三大概念
n物理仿真元素(Dynamic Item)
p谁要进行物理仿真?
n
n物理仿真行为(Dynamic Behavior)
p执行怎样的物理仿真效果?怎样的动画效果?
n物理仿真器(Dynamic Animator)
p让物理仿真元素执行具体的物理仿真行为
n物理仿真元素
n注意
p不是任何对象都能做物理仿真元素
p不是任何对象都能进行物理仿真
p
n哪些对象才能做物理仿真元素
p任何遵守了UIDynamicItem协议的对象
pUIView默认已经遵守了UIDynamicItem协议,因此任何UI控件都能做物理仿真
pUICollectionViewLayoutAttributes类默认也遵守UIDynamicItem协议
p
n物理仿真行为
nUIDynamic提供了以下几种物理仿真行为
pUIGravityBehavior:重力行为
pUICollisionBehavior:碰撞行为
pUISnapBehavior:捕捉行为
pUIPushBehavior:推动行为
pUIAttachmentBehavior:附着行为
pUIDynamicItemBehavior:动力元素行为
p
n物理仿真行为须知
p上述所有物理仿真行为都继承自UIDynamicBehavior
p所有的UIDynamicBehavior都可以独立进行
p组合使用多种行为时,可以实现一些比较复杂的效果
n
n物理仿真器
n物理仿真器须知
p它可以让物理仿真元素执行物理仿真行为
p它是UIDynamicAnimator类型的对象
p
nUIDynamicAnimator的初始化
p- (instancetype)initWithReferenceView:(UIView *)view;
üview参数:是一个参照视图,表示物理仿真的范围
n物理仿真器
nUIDynamicAnimator的常见方法
p- (void)addBehavior:(UIDynamicBehavior *)behavior;
ü添加1个物理仿真行为
ü
p- (void)removeBehavior:(UIDynamicBehavior *)behavior;
ü移除1个物理仿真行为
p
p- (void)removeAllBehaviors;
ü移除之前添加过的所有物理仿真行为
p
n物理仿真器
nUIDynamicAnimator的常见属性
p@property (nonatomic, readonly) UIView* referenceView;
ü参照视图
ü
p@property (nonatomic, readonly, copy) NSArray* behaviors;
ü添加到物理仿真器中的所有物理仿真行为
p
p@property (nonatomic, readonly, getter = isRunning) BOOL running;
ü是否正在进行物理仿真
ü
p@property (nonatomic, assign) id <UIDynamicAnimatorDelegate> delegate;
ü代理对象(能监听物理仿真器的仿真过程,比如开始和结束)
ü
p
n重力行为(UIGravityAnimator)
n简介
p给定重力方向、加速度,让物体朝着重力方向掉落
p
nUIGravityBehavior的初始化
p- (instancetype)initWithItems:(NSArray *)items;
üitem参数 :里面存放着物理仿真元素
ü
nUIGravityBehavior常见方法
p- (void)addItem:(id <UIDynamicItem>)item;
ü添加1个物理仿真元素
p
p- (void)removeItem:(id <UIDynamicItem>)item;
ü移除1个物理仿真元素
n重力行为(UIGravityAnimator)
nUIGravityBehavior常见属性
p@property (nonatomic, readonly, copy) NSArray* items;
ü添加到重力行为中的所有物理仿真元素
p
p@property (readwrite, nonatomic) CGVector gravityDirection;
ü重力方向(是一个二维向量)
ü
p@property (readwrite, nonatomic) CGFloat angle;
ü重力方向(是一个角度,以x轴正方向为0°,顺时针正数,逆时针负数)
ü
p@property (readwrite, nonatomic) CGFloat magnitude;
ü量级(用来控制加速度,1.0代表加速度是1000 points /second²)
n碰撞行为(UICollisionBehavior)
n简介
p可以让物体之间实现碰撞效果
p可以通过添加边界(boundary),让物理碰撞局限在某个空间中
p
nUICollisionBehavior边界相关的方法
p- (void)addBoundaryWithIdentifier:(id <NSCopying>)identifier forPath:(UIBezierPath*)bezierPath;
p- (void)addBoundaryWithIdentifier:(id <NSCopying>)identifier fromPoint:(CGPoint)p1 toPoint:(CGPoint)p2;
p- (UIBezierPath*)boundaryWithIdentifier:(id <NSCopying>)identifier;
p- (void)removeBoundaryWithIdentifier:(id <NSCopying>)identifier;
p@property (nonatomic, readonly, copy) NSArray* boundaryIdentifiers;
p- (void)removeAllBoundaries;
n碰撞行为(UICollisionBehavior)
nUICollisionBehavior常见用法
p@property (nonatomic, readwrite) BOOL translatesReferenceBoundsIntoBoundary;
ü是否以参照视图的bounds为边界
ü
p- (void)setTranslatesReferenceBoundsIntoBoundaryWithInsets:(UIEdgeInsets)insets;
ü设置参照视图的bounds为边界,并且设置内边距
ü
p@property (nonatomic, readwrite) UICollisionBehaviorMode collisionMode;
ü碰撞模式(分为3种,元素碰撞、边界碰撞、全体碰撞)
p
p@property (nonatomic, assign, readwrite) id <UICollisionBehaviorDelegate> collisionDelegate;
ü代理对象(可以监听元素的碰撞过程)
n捕捉行为(UISnapBehavior)
n简介
p可以让物体迅速冲到某个位置(捕捉位置),捕捉到位置之后会带有一定的震动
nUISnapBehavior的初始化
p- (instancetype)initWithItem:(id <UIDynamicItem>)item snapToPoint:(CGPoint)point;
p
nUISnapBehavior常见属性
p@property (nonatomic, assign) CGFloat damping;
ü用于减幅、减震(取值范围是0.0 ~ 1.0,值越大,震动幅度越小)
ü
nUISnapBehavior使用注意
p如果要进行连续的捕捉行为,需要先把前面的捕捉行为从物理仿真器中移除
n

物理引擎UIDynamic的更多相关文章

  1. 最全的iOS物理引擎demo

    概述 最全的iOS物理引擎demo,实现重力.碰撞.推力.摆动.碰撞+重力.重力弹跳.仿摩拜单车贴纸效果.防iMessage滚动效果.防百度外卖首页重力感应等效果! 详细 代码下载:http://ww ...

  2. iOS开发——高级篇——UIDynamic 物理引擎

    一.UIDynamic 1.简介什么是UIDynamicUIDynamic是从iOS 7开始引入的一种新技术,隶属于UIKit框架可以认为是一种物理引擎,能模拟和仿真现实生活中的物理现象重力.弹性碰撞 ...

  3. UIDynamic仿物理引擎-浮动碰撞效果-b

    最近产品提了个需求(电商的APP-两鲜),需要在APP背景加上几个水果图案在那里无规则缓慢游荡...模仿 天天果园 APP的.好吧,那我就在网上找了很多文章,总结一下写个demo.效果如下: Mou ...

  4. UIDynamic物理引擎

    iOS开发拓展篇—UIDynamic(简单介绍) 一.简单介绍 1.什么是UIDynamic UIDynamic是从iOS 7开始引入的一种新技术,隶属于UIKit框架 可以认为是一种物理引擎,能模拟 ...

  5. iOS中的物理引擎

    目前知名的2D物理引擎有 Box2d,和Chipmunk,这些是跨平台的.但苹果本身也封装了一个物理引擎, UIDynamic是从iOS 7开始引入的一种新技术,隶属于UIKit框架.这可以让开发人员 ...

  6. Unity3D游戏开发初探—3.初步了解U3D物理引擎

    一.什么是物理引擎? 四个世纪前,物理学家牛顿发现了万有引力,并延伸出三大牛顿定理,为之后的物理学界的发展奠定了强大的理论基础.牛顿有句话是这么说的:“如果说我看得比较远的话,那是因为我站在巨人的肩膀 ...

  7. Verlet-js JavaScript 物理引擎

    subprotocol最近在Github上开源了verlet-js.地址为https://github.com/subprotocol/verlet-js.verlet-js是一个集成Verlet的物 ...

  8. 制作简单的2D物理引擎(一)——动力学基础

    一切的基础 点 在二维平面中,点$P$就是坐标$(x,y)$,点集就是一系列坐标的集合$\{P_1,P_2,...,P_n\}$,不过这个集合是有序的(顺时针). 向量 加减运算 $$\vec{P}\ ...

  9. 制作简单的2D物理引擎(零)

    最近发现了Github上的开源物理引擎项目Matter.js,对它很感兴趣,发现源码并不算长,算上注释大约1万行左右,值得剖析一番.Matter.js实现一个最小化的2D物理引擎,性能不错,故打算用C ...

随机推荐

  1. 关于Promise的详细总结

    1. 异步回调 1.1 回调地狱 在需要多个操作的时候,会导致多个回调函数嵌套,导致代码不够直观,就是常说的回调地狱 1.2 并行结果 如果几个异步操作之间并没有前后顺序之分,但需要等多个异步操作都完 ...

  2. Vijos 1164 曹冲养猪(中国剩余定理)

    P1164曹冲养猪 Accepted 标签:三国争霸[显示标签] 描写叙述 自从曹冲搞定了大象以后,曹操就開始捉摸让儿子干些事业,于是派他到中原养猪场养猪,但是曹冲满不高兴.于是在工作中马马虎虎,有一 ...

  3. Android应用开发-小巫CSDN博客client之获取评论列表

    Android应用开发-小巫CSDN博客客户端之获取评论列表 上一篇博客介绍了博文具体内容的业务逻辑实现,本篇博客介绍小巫CSDN博客客户端的最后一项功能.获取评论列表,这个功能的实现跟前面获取文章列 ...

  4. 算法中的优化问题(optimization problem)

    和多数算法不同的是,有些问题的答案不只一个,而是需要在多个答案中,按照一定标准选出"最佳"答案,这类问题就统称为"优化问题"(optimization prob ...

  5. Zookeeper源码用ant进行编译为eclipse工程--转载

    原文地址:http://www.it165.net/os/html/201411/10142.html Zookeeper GitHub的下载地址是:https://github.com/apache ...

  6. RMAN-03002、RMAN-06059

    使用RMAN备份的时候无法正常备份,抛出以下错误: RMAN-03002: failure of backup command at 04/20/2015 18:55:45 RMAN-06059: e ...

  7. Altium Designer中Electrical Type的意思

    :之前Altium Designer设计图时发现: 它的引脚上有两个三角 双击打开引脚,打开配置: 于是从网上查了一下:http://blog.csdn.net/jbb0523/article/det ...

  8. 截止频率-3db

    关于-3db截止频率 (2013-06-22 10:47:02) 转载▼   分类: 信号.电路 关于-3db截止频率 为什么当信号衰减了-3db的时候就算是截止频率了.这里面有什么高深的内涵.毕竟这 ...

  9. rz、sz (上传下载)命令参数的解释

    $ man rz,查看帮助: -a, –ascii -b, –binary 用binary的方式上传下载,不解释字符为 ascii -e, –escape 强制escape 所有控制字符,比如 Ctr ...

  10. js读取json,纠结。。。

    什么是json.先小抄一段:  JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.採用全然独立于语言的文本格式, 是理想的数据交换格式,同一时候,JSO ...