1

Apple の以下のコードを使用して、アニメーションを一時停止および再開しています。

一時停止ボタンをクリックすると、まずアニメーションを一時停止してからポップアップを表示します。ポップアップの再生ボタンをクリックすると、最初にポップアップを削除してからアニメーションを再開します。私が直面している問題は、再開に失敗することがあるということです。アニメーションは一時停止したままです。これは、アニメーションの一時停止と再開を遅延なく繰り返したときに発生します。

- (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;
    }
}
4

1 に答える 1

2

現在のイベントループ中にアニメーションがすでに再開されているかどうか、または一時停止が発生したかどうかを確認する必要があると思います。この条件をあなたに追加してください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;
        }
    }
}
于 2013-05-27T10:44:45.537 に答える