2

タイマーの実行中に画面上でボタンをドラッグしようとすると、タイマーが遅れます。これは、タイマーが動画であるため、目立ちます。

何かを変更してこれを解決する方法はありますか、それともプロジェクト全体を変更する必要がありますか?

4

2 に答える 2

1

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 フレームワークがアニメーションのタイミングを正確かつスムーズに保とうとするためです。つまり、外部イベントによってアニメーションがいくつかのフレームをドロップした場合でも、フレームワークは、指定された期間にわたってアニメーションを適切に補間することにより、比較的見栄えの良いアニメーションを生成します。

タイマーに固執したい場合は、自分で補間を行います。

  1. アニメーションの最初の時間を覚えておいてください
  2. 定期的にタイマーを起動する
  3. 新しい時間と元の時間の差に基づいて、アニメーションの合計時間と移動に必要な距離を考慮して、画像の位置を計算します

これにより、単純な「Y ミリ秒ごとに X ピクセルの画像を移動する」アプローチよりもスムーズな結果が得られ、アニメーションが正確に指定された時間で実行されるようになります。

于 2013-10-30T22:41:18.963 に答える
0

NSTimer実行ループのイベントとして実装されます。いつ起動するかについては約束されておらず、時間が重要なものには適していません。NSTimer1 秒間に 2 回以上発砲している場合は、おそらく間違った目的で使用しています。実行ループがすぐに処理されないようなことをすると、タイマーの問題が確実に発生します。

パン ジェスチャ レコグナイザーは、メインの実行ループに多くのメッセージを送信できます。これは通常は問題ありませんが、特に move コールバックで重要な作業を行うと、タイマーが確実に中断される可能性があります。

通常、適切な解決策は、UIView アニメーション、Core Animation、または UIKit Dynamics を使用して画面上で物を動かすことです。それが、これらのツールが構築された目的です。@ksimons は良いリンクをいくつか提供しています。急速に起動する非アニメーション アクションの場合、GCD タイマーは通常、 よりも優れたソリューションですNSTimer

画面を更新するためにタイマーが必要な場合CADisplayLinkは、NSTimer. 人々が犯すよくある間違いNSTimerは、画面よりも速く更新される をスケジュールすることです。CADisplayLinkアニメーションではなく、カスタム描画の状況に最適です。ここでも、非常に優れたアニメーション フレームワークが利用できます。

于 2013-10-31T03:21:47.337 に答える