新浪微博 有道云笔记 麦库 EverNote Pocket Instapaper 更多

CALayer的上动画的暂停和恢复

CALayer上动画的暂停和恢复


#pragma mark 暂停CALayer的动画
-(
void)pauseLayer:(CALayer*)layer
{
CFTimeInterval pausedTime = [layer convertTime:CACurrentMediaTime()fromLayer:nil];
// CALayer的时间停止走动
      layer.speed =
 0.0;
// CALayer的时间停留在pausedTime这个时刻
     layer.timeOffset = pausedTime;
}

#pragma mark 恢复CALayer的动画
-(
void)resumeLayer:(CALayer*)layer
{
CFTimeInterval pausedTime = layer.timeOffset;
// 1. CALayer的时间继续行走
      layer.speed =
 1.0;
// 2. 取消上次记录的停留时刻
      layer.timeOffset =
 0.0;
// 3. 取消上次设置的时间
      layer.
beginTime = 0.0;

// 4. 计算暂停的时间(这里也可以用CACurrentMediaTime()-pausedTime)
     CFTimeInterval timeSincePause = [layer convertTime:CACurrentMediaTime() fromLayer:
nil] - pausedTime;
// 5. 设置相对于父坐标系的开始时间(往后退timeSincePause)
      layer.beginTime = timeSincePause;
}
© chenyilong. Powered by Postach.io
posted @ 2014-02-19 17:39  iTeaTime(技术清谈)  阅读(351)  评论(0编辑  收藏  举报