タイマーの実行中に画面上でボタンをドラッグしようとすると、タイマーが遅れます。これは、タイマーが動画であるため、目立ちます。
何かを変更してこれを解決する方法はありますか、それともプロジェクト全体を変更する必要がありますか?
タイマーの実行中に画面上でボタンをドラッグしようとすると、タイマーが遅れます。これは、タイマーが動画であるため、目立ちます。
何かを変更してこれを解決する方法はありますか、それともプロジェクト全体を変更する必要がありますか?
CoreAnimation ( https://developer.apple.com/library/ios/documentation/cocoa/conceptual/coreanimation_guide/introduction/introduction.html ) を使用するか、単純なアニメーションの場合は UIView のanimateWithDuration:animations
メソッド ( https://developer. apple.com/library/ios/documentation/uikit/reference/uiview_class/UIView/UIView.html#//apple_ref/occ/clm/UIView/animateWithDuration:animations :)。
これは、外部イベントに関係なく、Apple フレームワークがアニメーションのタイミングを正確かつスムーズに保とうとするためです。つまり、外部イベントによってアニメーションがいくつかのフレームをドロップした場合でも、フレームワークは、指定された期間にわたってアニメーションを適切に補間することにより、比較的見栄えの良いアニメーションを生成します。
タイマーに固執したい場合は、自分で補間を行います。
これにより、単純な「Y ミリ秒ごとに X ピクセルの画像を移動する」アプローチよりもスムーズな結果が得られ、アニメーションが正確に指定された時間で実行されるようになります。
NSTimer
実行ループのイベントとして実装されます。いつ起動するかについては約束されておらず、時間が重要なものには適していません。NSTimer
1 秒間に 2 回以上発砲している場合は、おそらく間違った目的で使用しています。実行ループがすぐに処理されないようなことをすると、タイマーの問題が確実に発生します。
パン ジェスチャ レコグナイザーは、メインの実行ループに多くのメッセージを送信できます。これは通常は問題ありませんが、特に move コールバックで重要な作業を行うと、タイマーが確実に中断される可能性があります。
通常、適切な解決策は、UIView アニメーション、Core Animation、または UIKit Dynamics を使用して画面上で物を動かすことです。それが、これらのツールが構築された目的です。@ksimons は良いリンクをいくつか提供しています。急速に起動する非アニメーション アクションの場合、GCD タイマーは通常、 よりも優れたソリューションですNSTimer
。
画面を更新するためにタイマーが必要な場合CADisplayLink
は、NSTimer
. 人々が犯すよくある間違いNSTimer
は、画面よりも速く更新される をスケジュールすることです。CADisplayLink
アニメーションではなく、カスタム描画の状況に最適です。ここでも、非常に優れたアニメーション フレームワークが利用できます。