zoukankan      html  css  js  c++  java
  • 物理引擎UIDynamic

    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
  • 相关阅读:
    万能转换器boost::lexical_cast
    6.1.5 文本文件与二进制文件
    HDU4002 Find the maximum [数论]
    HDU4001 To Miss Our Children Time [DP]
    HDU3247 Resource Archiver [AC自动机+DP]
    HDU2457 DNA repair [AC自动机+DP]
    HDU2825 Wireless Password [AC自动机+压缩DP]
    ZOJ3228 Searching the String [AC自动机]
    HDU4003 Find Metal Mineral [树形DP]
    ZOJ3494 BCD Code [AC自动机+DP]
  • 原文地址:https://www.cnblogs.com/niexiaobo/p/4888693.html
Copyright © 2011-2022 走看看