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. rocketmq事务消息入门介绍

    说明 周五的时候发了篇:Rocketmq4.3支持事务啦!!!,趁着周末的时候把相关内容看了下,下面的主要内容就是关于RocketMQ事务相关内容介绍了. 说明: 今天这篇仅仅是入门介绍,并没有涉及到 ...

  2. IOS的UIWebView中JS点击事件,需要加入cursor:pointer;属性才可以

    IOS的UIWebView中JS点击事件,需要加入cursor:pointer;属性才可以. Android的WebView可以支持外链样式,js文件:IOS则需要改为内嵌样式和JS文件.

  3. vue使用jsonp

    axios不支持jsonp,所以需使用其他插件:vue-jsonp npm i vue-jsonp -S 然后在 src/main.js : import Vue from 'vue' import ...

  4. 使用Docker来运行WebApp

    原文:使用Docker来运行WebApp (作者:陈玓玏) 1.加载镜像到容器并运行webapp脚本 先进入管理员模式: su root 然后使用已有的webapp镜像来练习在docker上运行web ...

  5. 【 Codeforces Round #430 (Div. 2) A 】 Kirill And The Game

    [链接]点击打开链接 [题意] 水题 [题解] 枚举b从x..y看看k*i是不是在l..r之间就好. [错的次数] 0 [反思] 在这了写反思 [代码] #include <cstdio> ...

  6. 【CS Round #46 (Div. 1.5) E】Ultimate Orbs

    [链接]链接 [题意] n个人从左到右站在一条直线上.每个人都有一个能力值g[i],然后每个人可以将相邻的一个人打败. 然后它的能力值能够增加相应的能力值(就是打败了的那个人的能力值). A能够打败B ...

  7. 【Android开发经验】我们要友好的告诉用户,程序要崩溃了

        转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992     尽管我们的程序在正式上线之前,都会经过严格的測试.从而保证程序的健壮性和良好的用户体验,可是 ...

  8. 目标识别(object detection)中的 IoU(Intersection over Union)

    首先直观上来看 IoU 的计算公式: 由上述图示可知,IoU 的计算综合考虑了交集和并集,如何使得 IoU 最大,需要满足,更大的重叠区域,更小的不重叠的区域. 两个矩形窗格分别表示: 左上点.右下点 ...

  9. JS数据类型的转换规则

    数据类型转换的规则 1 如果只有一个值,判断这个值是真还是假,遵循只有0,NaN,'',null,undefined这五个是假的,其余的都是真 2 如果是两个值比较是否相等,遵循以下规则: ![]-& ...

  10. ssh远程执行命令并自动退出

    usage: ssh [-1246AaCfgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec] [-D [bind_address:]port] [ ...