IOS-笔记16(Animation)

来源:互联网 发布:java 接口开发demo 编辑:程序博客网 时间:2024/06/06 07:53

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












0 0
原创粉丝点击