在ios中暂停和恢复动画的问题

问题描述:

我使用Apple的以下代码暂停和恢复动画。在ios中暂停和恢复动画的问题

当单击暂停按钮时,我首先暂停动画,然后显示一个弹出窗口。当点击弹出窗口中的播放按钮时,我首先删除弹出窗口然后恢复动画。我面临的问题是,有时它无法恢复。动画保持暂停状态。当我快速暂停并重复播放动画而没有延迟时,就会发生这种情况。

- (void)pauseAnimation:(CALayer *)layer 
{ 
    if (m_pCustomImageBtnObj != nil) 
    { 
     CFTimeInterval pausedTime = 
      [layer convertTime:CACurrentMediaTime() fromLayer:nil]; 

     layer.speed = 0.0; 
     layer.timeOffset = pausedTime; 
    } 
} 

- (void)resumeAnimation 
{ 
    if (m_pCustomImageBtnObj != nil) 
    { 
     CFTimeInterval pausedTime = [m_pCustomImageBtnObj.layer timeOffset]; 
     m_pCustomImageBtnObj.layer.speed = 1.0; 
     m_pCustomImageBtnObj.layer.timeOffset = 0.0; 
     m_pCustomImageBtnObj.layer.beginTime = 0.0; 

     CFTimeInterval timeSincePause = 
      [m_pCustomImageBtnObj.layer convertTime:CACurrentMediaTime() 
              fromLayer:nil] - pausedTime; 

     m_pCustomImageBtnObj.layer.beginTime = timeSincePause; 
    } 
} 

我认为你必须检查动画并在当前事件循环期间已经恢复,或暂停也终究会发生。将此条件添加到您的resumeAnimation

- (void)resumeAnimation 
{ 
    if (m_pCustomImageBtnObj != nil) 
    { 
     CFTimeInterval pausedTime = [m_pCustomImageBtnObj.layer timeOffset]; 
     if (pausedTime != 0) { // check if resume is called before. 
      m_pCustomImageBtnObj.layer.speed = 1.0; 
      m_pCustomImageBtnObj.layer.timeOffset = 0.0; 
      m_pCustomImageBtnObj.layer.beginTime = 0.0; 

      CFTimeInterval timeSincePause = 
      [m_pCustomImageBtnObj.layer convertTime:CACurrentMediaTime() 
              fromLayer:nil] - pausedTime; 

      m_pCustomImageBtnObj.layer.beginTime = timeSincePause; 
     } 
    } 
}