8 DynamicAnimtor(物理仿真器) - 斯坦福 iOS

- UIView 的动画

为视图添加动画主要有3种方法:

视图中有一些非常特殊的属性, 比如: frame``transform``alpha 属性.
通过 animateWithDuration: 方法来实现:

    + (void)animateWithDuration:(NSTimeInterval)duration 
                           delay:(NSTimeInterval)delay 
                         options:(UIViewAnimationOptions)options 
                      animations:(void (^)(void))animations 
                      completion:(void (^)(BOOL finished))completion

但有时候我们用的不是这三个属性, 而是一些其它自定义属性,比如我们控制卡牌的翻转, 用的就是让 faceUp = YES, 它本身并不是一个动画属性, 但我想让视图通过动画, 来实现卡牌的翻转, 我要通过某些动画, 来修改整个视图的状态属性
通过 transitionWithView: 方法来实现:

    + (void)transitionWithView:(UIView *)view 
                       duration:(NSTimeInterval)duration 
                        options:(UIViewAnimationOptions)options 
                     animations:(void (^)(void))animations 
                     completion:(void (^)(BOOL finished))completion

- Dynamic Animation

定义一些物理规则, 然后应用于要添加动画效果的视图(View).

如何进行理解?

相当于有一个大的环境(地球),
环境里面有一些"规则"(重力),
"环境"中的"物体"(石头)都要遵循一定的"规则"(重力).

大致的步骤:

(1)创建一个环境(动力动画者)
(2)创建规则(动力行为),并添加到环境中
(3)创建在环境中的物体(动力项),并设置其要遵循的规则

如何运用它?

1.创建一个"环境" (动力动画者 UIDynamicAnimator *)

新建一个 UIDynamicAnimator 对象, 可以创建一个或者多个, 是为了对这些行为进行进行分组

    UIDynamicAnimator *animator = [UIDynamicAnimator initWithReferenceView:aView];
2.创建"规则",并添加到"环境中" (动力行为 UIDynamicBehavior *)

创建规则如: 重力, 碰撞, 推动等等, 并把这些添加到环境中

    UIGravityBehavior *gravity = [UIGravityBehavior alloc] init];
    [animator addBehavior:gravity]; //把重力行为添加到(UIDynamicAnimator)动力动画者
3.创建物体(动力项),并设置其要遵循的规则 (动力项 UIDynamicItem协议)
    //1.创建动力项
    id <UIDynamicItem> item1 = ...;
    
    //2.并设置其要遵循重力的规则
    [gravity addItem:item1];

通常情况下,动力项都是 UIView (90%都是), 但也可以为非视觉项添加动画, 只要其实现的<UIDynamicItem>协议就可以.

协议如下:

    @protocol UIDynamicItem
    
    @property (readonly) CGRect bounds;
    @property (readwrite) CGPoint center;
    @property (readwrite) CGAffineTransform transform;
    
    @end

其中动力项的 center 和 transform 属性是由animator(动力动画者)进行设置的(动力动画者的作用就是弄清动力项的中心,旋转和缩放比例的值),如果你想和动力动画者同时设置动力项属性, 可以调用 updateItemUsingCurrentState:(id<UIDynamicItem>)item 方法,

动力行为 Behaviors
  • UIGravityBehavior (重力行为)

  • UICollisionBehavior (碰撞行为)

  • UIAttachmentBehavior (吸附行为)

  • UIDynamicItemBehavior (动力项行为)

  • UIFieldBehavior (场行为)

  • UIPushBehavior (推动行为)

  • UISnapBehavior (速甩行为)

  • UIGravityBehavior (重力行为)

      @property (nonatomic,assign) CGFloat angle; //角度, 可设置重垂线的角度
      @property (nonatomic,assign) CGFloat magnitude; //设置重力的大小 1代表9.8N/m
    
  • UICollisionBehavior (碰撞行为)

      @property (nonatomic,assign) UICollisionBehaviorMode collisionMode;     //决定了动力项是相互碰撞弹开,还是只从边界碰撞弹开
      @property (nonatomic,assign) BOOL translatesReferenceBoundsIntoBoundary;        //将参考视图的边界,设置为有弹性的边界
      - (void)addBoundaryWithIdentifier:(NSString *)identifier forPath:(UIBezierPath *)path;      //添加一个UIBezierPath的碰撞边界,
    
  • UIAttachmentBehavior (吸附行为)
    通过它,可以将一个动力项吸附到一个固定锚点或另外一个动力项上.并且在初始化时指定吸附对象

  • UIDynamicItemBehavior (动力项行为)
    动力项内在的物理属性,设置动力项行为的基础属性(公共属性),比如摩擦力,弹力, 密度等, 它们在各个地方应该是一致的.

  • UIFieldBehavior (场行为)

  • UIPushBehavior (推动行为)
    推一下对象, 它就开始移动了

  • UISnapBehavior (速甩行为)
    速甩行为是将一个动力项甩到一个位置

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,711评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,932评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,770评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,799评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,697评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,069评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,535评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,200评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,353评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,290评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,331评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,020评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,610评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,694评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,927评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,330评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,904评论 2 341

推荐阅读更多精彩内容