IOS-笔记16(Animation)

UIView的成员的动画;View之间转换的动画;Core Animation:底层的,强大的动画框架;Dynamic Animation:基于物理引擎的动画。

UIView的成员的动画:

       一个调用即可,动画在另一个线程执行,这段设置执行过后会立即执行之后的代码:

       UIView.animateWithDuration(3.0,//执行时间
                           delay: 2.0,//等待时间
                           options: UIViewAnimationOptions.CurveEaseInOut,//动画效果选择
                           animations: { () -> Void in//设置你的动画
                               //在执行这句话时这个属性立即变为0,你所看到的动画只是表象
                               self.imageView.alpha = 0.0
                               self.imageView.transform.tx = 20.0
                               //self.imageView.frame.height
                           },
                           completion: { (Bool) -> Void in//动画执行完后,或被其他动画打断后执行,布尔值会告诉你是否完成这次动画
                               if Bool {
                               self.imageView.alpha = 1.0
                           }
            })

      另一种:

          UIView.transitionWithView(self.imageView,
                          duration: 2,
                          options: UIViewAnimationOptions.TransitionFlipFromLeft,
                          animations: { () -> Void in
                              self.image = UIImage(named: "1")
                          },
                          completion: { (Bool) -> Void in
                                                
                          })
      还有一种视图层级的:

            UIView.transitionFromView(fromView: UIView, 
                          toView: UIView, 
                          duration: NSTimeInterval, 
                          options: UIViewAnimationOptions, 
                          completion: { (Bool) -> Void in
                              //code
                          })

Dynamic Animation

      UIGravityBehavior,UIAttachmentBehavior,UICollisionBehavior,UISnapBehavior,UIPushBehavior,UIDynamicItemBehavior。UIDynamicBehavior是他们的父类。它有一个属性叫action,这是一个闭包函数,每个动画在执行时都会调用这个函数,如果一个对象在持续加速,那么就会持续调用这个函数。   

      以UIGravityBehavior为例,首先初始化一个UIDynamicAnimator和一个Behavior:

    let gravity = UIGravityBehavior()
    
    //var animator: UIDynamicAnimator = UIDynamicAnimator(referenceView: gameView)
    //这句话会报错因为现在我们还处在构造这个类的过程中,在构造完成前我们不能访问属性和方法
    lazy var animator: UIDynamicAnimator = {
        return UIDynamicAnimator(referenceView: self.gameView)
    }()//调用animator时要注意gameView一定已经初始化好了

      接着将Behavior加入animator,再将想要执行这个动画的物体加入Behavior:

    animator.addBehavior(gravity)   <p class="p1"><span class="s1">    gravity</span><span class="s2">.</span><span class="s3">addItem</span><span class="s2">(dropView)</span></p>
      如果你有很多个Behavior要添加,可以自己建一个UIDynamicBehavior的子类,通过复写初始化函数的方法添加子behavior:

    override init() {
        super.init()
        addChildBehavior(gravity)
        addChildBehavior(collider)
    }
       这样写一个公共方法就可以完成多个动画的添加:

    func addDrop(drop: UIView){
        dynamicAnimator?.referenceView?.addSubview(drop)
        gravity.addItem(drop)
        collider.addItem(drop)
    }
       如果你需要知道动画是否停止,或者是否即将要继续,你需要将自己设为代理并实现相应的方法:

    animator.delegate = self












你可能感兴趣的:(IOS-笔记16(Animation))