Shiftキーを押したときにMac OSのほとんどのグラフィカルエフェクトを遅くする方法と同じように、アプリケーションにスローモーションエフェクトを適用しようとしています。CoreAnimationでアニメーションのスローダウンとアクセラレーションを行う
私のアプリケーションはCoreAnimationを使用していますので、私はそれがとても重要あってはならないと思った:いくつかの低速の値(のような0.1
)にspeed
を設定し、私は終わりだ、とここで私は行くいったん戻っ1
に設定します。
残念ながら、これは正しい方法ではないようです。減速は素晴らしいですが、通常のスピードに戻したいときは、スピードが1
のように再開します。これは、基本的にShiftキーを押したままにしておくと、リリースすると即座にアニメーションが完了することを意味します。
アニメーションを一時停止して再開する方法を説明したテクニカルQAページがありますが、アニメーションを完全に一時停止していないと正しく表示されないようです。私は間違いなくタイムワーピングをよくしていません。
CoreAnimationでアニメーションを再開させてから再開するには、どうすればよいでしょうか?
-(void)flagsChanged:(NSEvent *)theEvent
{
CALayer* layer = self.layer;
[CATransaction begin];
CATransaction.disableActions = YES;
layer.speed = (theEvent.modifierFlags & NSShiftKeyMask) ? 0.1 : 1;
[CATransaction commit];
}
通常シフトを保持するだけのアニメーションに適用が開始しましたアニメーションのスピードアップ。これは、一般に、アニメーションが作成された時点でシフトが押されているかどうかに依存して、アニメーションの持続時間を変えることによって簡単に達成できます。 –
@ケビン・バラード、私は知っている;しかし、それはクールな効果を除いて、それはおそらく私の文脈ではいつでもそれを遅くすることができる可能性があります。 – zneak
まあ、速度を変更すると、oldspeed * time == newspeed * time + offset –