iOS开、发:UIView的Animation效果

扣扣网名[www.la240.com/html2017/1/18/]

   所谓动画效果,就是会动的画,到iOS App中来说的话,就是各种UIView的移动。 想想看,如果我们自己来实现所有UIView的动画效果,需要考虑些什么东西呢?

  * 该UIView现在在哪儿?

  * 该UIView最后会动到哪儿?

  * 该UIView以什么样的方式移动到那儿?

  * 该动画持续多长时间?

  * 每次移动的最小时间间隔?

  * 每次最小时间间隔的移动的应该移动到哪儿?

  * ….

  想想这是一个多么杀脑细胞的过程,尤其是每一次的动画过程都要重复这一折磨的过程。

  还好,现实比想象的美好, 苹果公司为开发者思考了上面的问题,通过使用UIKit提供的动画支持,开发者只需要简单的几行代码就能实现各种各样的动画效果。在UIKit中,所有的动画效果支持的方法都在UIView类中。

  首先,在UIView中有很多属性用以描述一个UIView的状态,而动画就是让UIView从一个状态平滑的过渡到另外一个状态的过程。这些属性有:

iOS开发:UIView的Animation效果 电脑高手

  通过设置这些属性,基本上就解决了动画中的移动到哪儿的问题。

  接着,苹果公司在UIView中加入很多方法来方便家控制动画的移动时间,以及移动的方式。iOS3.0及之前,UIView支持的Animation方法有如下这么多:

  Object-c代码

  @interface UIView(UIViewAnimation)

  + (void)beginAnimations:(NSString *)animationID context:(void *)context; // additional context info passed to will start/did stop selectors. begin/commit can be nested

  + (void)commitAnimations; // starts up any animations when the top level animation is commited

  // no getters. if called outside animation block, these setters have no effect.

  + (void)setAnimationDelegate:(id)delegate; // default = nil

  + (void)setAnimationWillStartSelector:(SEL)selector; // default = NULL. -animationWillStart:(NSString *)animationID context:(void *)context

  + (void)setAnimationDidStopSelector:(SEL)selector; // default = NULL. -animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context

  + (void)setAnimationDuration:(NSTimeInterval)duration; // default = 0.2

  + (void)setAnimationDelay:(NSTimeInterval)delay; // default = 0.0

  + (void)setAnimationStartDate:(NSDate *)startDate; // default = now ([NSDate date])

  + (void)setAnimationCurve:(UIViewAnimationCurve)curve; // default = UIViewAnimationCurveEaseInOut

  + (void)setAnimationRepeatCount:(float)repeatCount; // default = 0.0. May be fractional

  + (void)setAnimationRepeatAutoreverses:(BOOL)repeatAutoreverses; // default = NO. used if repeat count is non-zero

  + (void)setAnimationBeginsFromCurrentState:(BOOL)fromCurrentState; // default = NO. If YES, the current view position is always used for new animations -- allowing animations to "pile up" on each other. Otherwise, the last end state is used for the animation (the default).

  • 1、
  • 2、
  • 3、
  • 4、
  • 5、
  • 6、
  • 7、
  • 8、
  • 9、
  • 10、
  • 11、
  • 12、
  • 13、
  • 14、
  • 15、
  • 16、
  • 17、
  • 18、
  • 19、
  • 20、
  • 21、
  • 22、
  • 23、
  • 24、
  • 25、
  • 1、
  • 2、
  • 3、
  • 4、
  • 5、
  • 6、
  • 7、
  • 8、
  • 9、
  • 10、
  • 11、
  • 12、
  • 13、
  • 14、
  • 15、
  • 16、
  • 17、
  • 18、
  • 19、
  • 20、
  • 21、
  • 22、
  • 23、
  • 24、
  • 25、