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
- 最全的iOS物理引擎demo
概述 最全的iOS物理引擎demo,实现重力.碰撞.推力.摆动.碰撞+重力.重力弹跳.仿摩拜单车贴纸效果.防iMessage滚动效果.防百度外卖首页重力感应等效果! 详细 代码下载:http://ww ...
- iOS开发——高级篇——UIDynamic 物理引擎
一.UIDynamic 1.简介什么是UIDynamicUIDynamic是从iOS 7开始引入的一种新技术,隶属于UIKit框架可以认为是一种物理引擎,能模拟和仿真现实生活中的物理现象重力.弹性碰撞 ...
- UIDynamic仿物理引擎-浮动碰撞效果-b
最近产品提了个需求(电商的APP-两鲜),需要在APP背景加上几个水果图案在那里无规则缓慢游荡...模仿 天天果园 APP的.好吧,那我就在网上找了很多文章,总结一下写个demo.效果如下: Mou ...
- UIDynamic物理引擎
iOS开发拓展篇—UIDynamic(简单介绍) 一.简单介绍 1.什么是UIDynamic UIDynamic是从iOS 7开始引入的一种新技术,隶属于UIKit框架 可以认为是一种物理引擎,能模拟 ...
- iOS中的物理引擎
目前知名的2D物理引擎有 Box2d,和Chipmunk,这些是跨平台的.但苹果本身也封装了一个物理引擎, UIDynamic是从iOS 7开始引入的一种新技术,隶属于UIKit框架.这可以让开发人员 ...
- Unity3D游戏开发初探—3.初步了解U3D物理引擎
一.什么是物理引擎? 四个世纪前,物理学家牛顿发现了万有引力,并延伸出三大牛顿定理,为之后的物理学界的发展奠定了强大的理论基础.牛顿有句话是这么说的:“如果说我看得比较远的话,那是因为我站在巨人的肩膀 ...
- Verlet-js JavaScript 物理引擎
subprotocol最近在Github上开源了verlet-js.地址为https://github.com/subprotocol/verlet-js.verlet-js是一个集成Verlet的物 ...
- 制作简单的2D物理引擎(一)——动力学基础
一切的基础 点 在二维平面中,点$P$就是坐标$(x,y)$,点集就是一系列坐标的集合$\{P_1,P_2,...,P_n\}$,不过这个集合是有序的(顺时针). 向量 加减运算 $$\vec{P}\ ...
- 制作简单的2D物理引擎(零)
最近发现了Github上的开源物理引擎项目Matter.js,对它很感兴趣,发现源码并不算长,算上注释大约1万行左右,值得剖析一番.Matter.js实现一个最小化的2D物理引擎,性能不错,故打算用C ...
随机推荐
- Android RingtoneManager 铃声管理
package com.Aina.Android; import java.io.File; import android.app.Activity; import android.content.I ...
- 【CS Round #46 (Div. 1.5) C】Set Subtraction
[链接]h在这里写链接 [题意] 一开始有n个数字,然后有一个数字X,把每个数字都减去X,又生成N个新的数字. 然后把这2*N个数字混在一起. 告诉你这2*N个数字是什么.让你复原出原来的N个数字,以 ...
- Mycat常见问题与解决方案---宜将剩勇追穷寇,不可沽名学霸王
1 Mycat目前有哪些功能与特性? 答: • 支持 SQL 92标准 • 支持Mysql集群,可以作为Proxy使用 • 支持JDBC连接多数据库 • 支持NoSQL数据库 • 支持galera f ...
- 51Nod——N1118 机器人走方格
https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1118 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 ...
- keytool用法总结
一.keytool的概念 keytool 是个密钥和证书管理工具.它使用户能够管理自己的公钥/私钥对及相关证书,用于(通过数字签名)自我认证(用户向别的用户/服务认证自己)或数据完整性以及认证服务.在 ...
- android权限详细
访问登记属性 android.permission.ACCESS_CHECKIN_PROPERTIES ,读取或写入登记check-in数据库属性表的权限 获取错略位置 android.permiss ...
- IOS使用AsyncSocket进行Socket通信
首先导入CFNetwork.framework框架 1.下载ASyncSocket库源码 2.把ASyncSocket库源码加入项目 3.在项目增加CFNetwork框架 使用AsyncSocket开 ...
- Snail—Hibernate各种异常
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXExNzkxNDIyMDE4/font/5a6L5L2T/fontsize/400/fill/I0JBQk ...
- Java反射学习总结三(静态代理)
反射最常见的应用就是代理模式了. 本文先简单介绍一下代理模式,并写一个静态代理的例子.为下一篇重要的动态代理做点铺垫 代理模式的作用是: 为其他对象提供一种代理以控制对这个对象的访问. 另外在某些情况 ...
- linux的几个内核镜像格式Image 和 u-boot启动内核和文件系统时的一些环境变量的设置
关于编译powerpc linux的几个Image参考原文 http://blog.sina.com.cn/s/blog_86a30b0c0100wfzt.html 转载▼ PowerPC架构 L ...