一、简单介绍
1.什么是UIDynamic
UIDynamic是从iOS 7开始引入的一种新技术,隶属于UIKit框架
可以认为是一种物理引擎,能模拟和仿真现实生活中的物理现象
如:重力、弹性碰撞等现象
2.物理引擎的价值
广泛用于游戏开发,经典成功案例是“愤怒的小鸟”
让开发人员可以在远离物理学公式的情况下,实现炫酷的物理仿真效果
提高了游戏开发效率,产生更多优秀好玩的物理仿真游戏
3.知名的2D物理引擎
Box2d
Chipmunk
二、使用步骤
要想使用UIDynamic来实现物理仿真效果,大致的步骤如下
(1)创建一个物理仿真器(顺便设置仿真范围)
(2)创建相应的物理仿真行为(顺便添加物理仿真元素)
(3)将物理仿真行为添加到物理仿真器中开始仿真
三、相关说明
1.三个概念
(1)谁要进行物理仿真?
物理仿真元素(Dynamic Item)
(2)执行怎样的物理仿真效果?怎样的动画效果?
物理仿真行为(Dynamic Behavior)
(3)让物理仿真元素执行具体的物理仿真行为
物理仿真器(Dynamic Animator)
2.物理仿真元素
注意:
不是任何对象都能做物理仿真元素
不是任何对象都能进行物理仿真
物理仿真元素要素:
任何遵守了UIDynamicItem协议的对象
UIView默认已经遵守了UIDynamicItem协议,因此任何UI控件都能做物理仿真
UICollectionViewLayoutAttributes类默认也遵守UIDynamicItem协议
3.物理仿真行为
(1)UIDynamic提供了以下几种物理仿真行为
UIGravityBehavior:重力行为
UICollisionBehavior:碰撞行为
UISnapBehavior:捕捉行为
UIPushBehavior:推动行为
UIAttachmentBehavior:附着行为
UIDynamicItemBehavior:动力元素行为
(2)物理仿真行为须知
上述所有物理仿真行为都继承自UIDynamicBehavior
所有的UIDynamicBehavior都可以独立进行
组合使用多种行为时,可以实现一些比较复杂的效果
4.物理仿真器
(1)物理仿真器须知
它可以让物理仿真元素执行物理仿真行为
它是UIDynamicAnimator类型的对象
(2)UIDynamicAnimator的初始化
- (instancetype)initWithReferenceView:(UIView *)view;
view参数:是一个参照视图,表示物理仿真的范围
5.物理仿真器的说明
(1)UIDynamicAnimator的常见方法
- (void)addBehavior:(UIDynamicBehavior *)behavior; //添加1个物理仿真行为
- (void)removeBehavior:(UIDynamicBehavior *)behavior; //移除1个物理仿真行为
- (void)removeAllBehaviors; //移除之前添加过的所有物理仿真行为
(2)UIDynamicAnimator的常见属性
@property (nonatomic, readonly) UIView* referenceView; //参照视图
@property (nonatomic, readonly, copy) NSArray* behaviors;//添加到物理仿真器中的所有物理仿真行为
@property (nonatomic, readonly, getter = isRunning) BOOL running;//是否正在进行物理仿真
@property (nonatomic, assign) id <UIDynamicAnimatorDelegate> delegate;//代理对象(能监听物理仿真器的仿真过程,比如开始和结束)
如何使用swift写UIDynamic
import UIKit class FirstViewController: UIViewController,UICollisionBehaviorDelegate { var animator = UIDynamicAnimator() var gravity = UIGravityBehavior() var collision = UICollisionBehavior() var firstContact = false override func viewDidLoad() { super.viewDidLoad() let square = UIView(frame: CGRectMake(100, 100, 100, 100)) square.backgroundColor = UIColor.grayColor() view.addSubview(square) animator = UIDynamicAnimator(referenceView: view) gravity = UIGravityBehavior(items: [square]) animator.addBehavior(gravity) let barrier = UIView(frame: CGRectMake(0, 300, 130, 20)) barrier.backgroundColor = UIColor.redColor() view.addSubview(barrier) collision = UICollisionBehavior(items: [square]) collision.translatesReferenceBoundsIntoBoundary = true animator.addBehavior(collision) //添加一个碰撞体 let rightEdge = CGPointMake(barrier.frame.origin.x + barrier.frame.size.width, barrier.frame.origin.y) collision.addBoundaryWithIdentifier("barrier", fromPoint: barrier.frame.origin, toPoint: rightEdge) collision.action = { println("(NSStringFromCGAffineTransform(square.transform)),(NSStringFromCGPoint(square.center))") //只要动就会触发,可以获得动的物体的位置 } collision.collisionDelegate = self let itemBehaviour = UIDynamicItemBehavior(items: [square]) itemBehaviour.elasticity = 0.6 //更改弹性 animator.addBehavior(itemBehaviour) } func collisionBehavior(behavior: UICollisionBehavior, beganContactForItem item: UIDynamicItem, withBoundaryIdentifier identifier: NSCopying, atPoint p: CGPoint) { println("began contact") //碰撞时触发 //每次碰撞都会变黄一下,然后又转成灰色 let view = item as UIView view.backgroundColor = UIColor.yellowColor() UIView.animateWithDuration(0.3, animations: { view.backgroundColor = UIColor.grayColor() }) //检测第一次碰撞,动态添加behaviors if !firstContact { firstContact = true //处理第一次碰撞的地方 } }
相关推荐
主要介绍了iOS开发中使用UIDynamic来捕捉动画组件的重力行为的方法,代码基于传统的Objective-C,需要的朋友可以参考下
iOS开发进阶篇-成为一个iOS开发高手(PDF)
iOS开发UI篇—UITableview控件简单介绍.docx编程资料
iOS开发进阶篇-成为iOS开发高手-源码
ios开发介绍:IOS开发入门学习路线介绍ios开发介绍:IOS开发入门学习路线介绍ios开发介绍:IOS开发入门学习路线介绍ios开发介绍:IOS开发入门学习路线介绍ios开发介绍:IOS开发入门学习路线介绍
第一部分介绍iOS 开发的常用工具,第二部分介绍iOS开发中的一些常见的实践经验,第三部分介绍iOS 开发中涉及的原理。 如果把成为iOS 开发高手的过程比作武侠小说中的修炼过程的话,工具、实践和理论的学习就分别对应...
IOS开发环境搭建,和一些IOS开发的简单实例;包括如何注册APPLE ID、开发者帐号,工具的准备等
资源名称:iOS开发视频教程资源目录:【】iOS开发视频教程-第01讲-iOS历史介绍【】iOS开发视频教程-第02讲-XCode安装【】iOS开发视频教程-第03讲-UIView_PPT【】iOS开发视频教程-第04讲-UILabel【】iOS开发视频教程-...
唐巧的《iOS开发进阶》,希望对一些初级的程序员有用
资源名称:《iOS开发零基础入门教程》(40集)资源目录:【】传智播客《iOS开发零基础入门教程》1.1【】传智播客《iOS开发零基础入门教程》1.2【】传智播客《iOS开发零基础入门教程》1.3【】传智播客《iOS开发零基础...
iOS开发UI篇—IOS开发中Xcode的一些使用技巧.pdf
精通iOS开发源码下载地址,这个本书简直太棒了,是我买过的性价比最高的一本书。
ios开发流程ios开发流程
XE6 & IOS开发之开发者账号、苹果证书(3):关于在XE6中使用苹果证书的简单介绍 306 XE7 & IOS开发之开发账号(1):开发证书、AppID、设备、开发授权profile的申请使用,附Debug真机调试演示(XCode所有版本通用,...
iOS开发基本情况介绍 iOS开发概况,开发语言介绍 iOS开发环境搭建 iOS开发环境搭建介绍,XCode和Interface Builder的介绍 iOS软件开发者证书 iOS账户的获取,软件开发者证书的介绍
这是一套从一个对iOS开发感兴趣的学员到iOS开发高手的系统、专业的课程体系。以培养企业开发真正需要的人才为目标,每个知识点都用案例来讲解。也适合想提升技能的已从事iOS开发的工作人员以最短时间内提升技能的...
作者唐巧,本书定位于帮助那些iOS开发人员提高自己的开发水平