1. 程式人生 > >IOS 如何暫停和恢復CALayer上的動畫

IOS 如何暫停和恢復CALayer上的動畫

coreAnimation的動畫是存在於CALayer上面的,有些時候需要突然暫停某個元件的動畫效果,同時保留當前動畫的狀態,

如果是用removeAnimation會顯得很突兀,不夠平滑,所以可以利用設定動畫速度和設定一個時間偏移量來暫停動畫:

  1. //用來暫停layer上的動畫  
  2. -(void)pauseLayer:(CALayer*)layer  
  3. {  
  4.     CFTimeInterval pausedTime = [layer convertTime:CACurrentMediaTime() fromLayer:nil];  
  5.     layer.speed = 0.0;  
  6.     layer.timeOffset = pausedTime;  
  7. }  
  8. //恢復layer上的動畫  
  9. -(void)resumeLayer:(CALayer*)layer  
  10. {  
  11.     CFTimeInterval pausedTime = [layer timeOffset];  
  12.     layer.speed = 1.0;  
  13.     layer.timeOffset = 0.0;  
  14.     layer.beginTime = 0.0;  
  15.     CFTimeInterval timeSincePause = [layer convertTime:CACurrentMediaTime() fromLayer:nil] - pausedTime;  
  16.     layer.beginTime = timeSincePause;  
  17. }