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 ...
随机推荐
- meld文件的脚本
今天模仿着别人的脚本,结合网上的资料,摸索着写了一个简单的脚本,用来打开meld 工具.这个脚本虽然简单,但这是第一次自己写脚本,记录下来,作为自己python学习的起点.代码如下 #/use/bin ...
- Android Studio将Eclipse的项目作为module的依赖库
情形: 我们现在有一个eclipse的项目,我们想把这个项目作为android studio的module的一个依赖库. 以前我们在eclipse的时候常常是在一个工作区里面把一个A工程 as a l ...
- LayUI-Table表格渲染
记项目中又一表格使用方法,项目首选是使用BootstrapTable的,但是经过多番查证与调试,始终没有把固定列的功能调试成功,找到的成功的例子原样照搬都不行,文件引入也都没有问题,实在搞不懂了,如果 ...
- loadrunner监控apache服务
一.apache配置步骤(假设apache服务已安装) 1.使用find / -name httpd.conf命令查找httpd.conf文件 2.使用cd opt/lampp/apache2/con ...
- 原生js大总结六
051.如何打印当前浏览器的版本等信息 navigator.userAgent 返回包含浏览器版本等信息的字符串 ,常用于判断浏览器版本及使用设备(PC或者移动端 052 .在浏览器地址栏 ...
- Ten ways to improve the performance of large tables in MySQL--转载
原文地址:http://www.tocker.ca/2013/10/24/improving-the-performance-of-large-tables-in-mysql.html Today I ...
- 当数据库没有备份,redo或undo损坏
数据库在没有备份的情况下,如果数据库redo或undo损坏,可以通过如下方法处理,但是不一定成功 把init文件中的: undo_management=manual 然后启动数据库到mount 状态后 ...
- GPUImage ==> 一个基于GPU图像和视频处理的开源iOS框架
Logo 项目介绍: GPUImage是Brad Larson在github托管的开源项目. GPUImage是一个基于GPU图像和视频处理的开源iOS框架,提供各种各样的图像处理滤镜,并且支持照相机 ...
- netty reactor线程模型分析
netty4线程模型 ServerBootstrap http示例 // Configure the server. EventLoopGroup bossGroup = new EpollEvent ...
- APK瘦身记,怎样实现高达53%的压缩效果
作者:非戈@阿里移动安全,很多其它技术干货.请訪问阿里聚安全博客 1.我是怎么思考这件事情的 APK是Android系统安装包的文件格式.关于这个话题事实上是一个老生常谈的题目.不论是公司内部.还是外 ...