SwiftでプログラムされたiOSアプリでUIPanGestureRecognizer
を使用して、ユーザーが画像の色成分を制御できるようにしています。更新はわずか1秒しかかかりませんが、UIPanGestureRecognizer
は1秒間に何十回も呼び出されるので、全体的な見栄えが遅くなります。これが起こらないようにする最良の方法は何ですか?今は3回目の更新のたびに関数を呼び出すようにしていますが、これは単調ではないようです。UIPanGestureRecognizer更新間隔
答えて
私はあなたのジェスチャーに十分に迅速に反応できない場合、彼らがバックログになるという誤った仮定に基づいてあなたの解決策(3回目の更新を考えてみてください)を信じています。しかし、それはどのように動作するのではありません。メインスレッドがジェスチャーに追いつけない場合、ジェスチャーは削除され、バックログにはなりません。実際、あなたの解決策(3回目の更新を考えてみる)は、それを解決するのではなく、遅れを導入するだけです。
だから、目標はタッチをより反応的にすることです。 2つの可能性の問題がここにあります:それは成功したパンとして識別される前
パンジェスチャーは、ジェスチャーが最初に認識される前に、このようにわずかなずれがあることができ、少しの運動が必要です。ジェスチャー認識装置とその前に問題の周りのトリックがありますがあなたの代わりに、など、ジェスチャー認識装置を使用して
touchesBegan
、touchesMoved
を実装していないときは、第二の特徴可能があります。ジェスチャーを最初に認識するために遅れを避けるだけでなく、予測的なタッチにも参加することができます。
ので、デバイス上の高パフォーマンスなタッチのために、あなたが何かを行うことができます:
var start: CGPoint?
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
start = touches.first?.location(in: view)
}
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
guard let touch = touches.first else { return }
let point: CGPoint
if let predictedTouch = event?.predictedTouches(for: touch)?.last {
point = predictedTouch.location(in: view)
} else {
point = touch.location(in: view)
}
updateColor(for: point)
}
// make sure when you're done to update in `touchesEnded`, too, in case
// the last `touchesMoved` generated a predictive touch, but when we're
// done, we really want to use the final real `location`
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
guard let touch = touches.first else { return }
updateColor(for: touch.location(in: view))
}
private func updateColor(for point: CGPoint) {
// do something with `start` and `point` to adjust the color
}
注意を、私の経験では、常にシミュレータで予測タッチを体験するので、確認することはありませんこれを物理的なデバイスでテストすることができます。
第3の潜在的な問題があることを認識する価値があります。具体的には、「カラーコンポーネントの変更」が長すぎて60fpsの画像をレンダリングできない場合は、計測器でプロファイリングを行い、その問題の原因を特定したいと考えています。しかし、問題の再現可能な例(例:MCVE)を見なければコメントできません。
また、スウィフトコードに応じてかなりのパフォーマンスの変更が行われる可能性があるので、ビルドを「リリース」してから、物理的なデバイスでテストしてくださいシミュレータ内にあります。
しかし、物理的なデバイスで予測的なタッチを使用してリリースビルドをテストする場合は、一般にはまともなパフォーマンスを得る必要があります。しかし、いくつかのコードを見ずに言うのは難しいです。
- 1. コントロールロケーションマネージャの更新間隔
- 2. Amazonアフィリエイトレポート更新間隔
- 3. kubernetes rolling更新間隔
- 4. Androidの場所の更新間隔
- 5. RainLoop自動更新間隔値
- 6. UIPanGestureRecognizerで制約を更新する
- 7. 一定間隔で更新パネルを更新する
- 8. ロケーション更新の更新間隔は正確ですか?
- 9. XML/HTML - 1時間間隔のXMLファイルを更新する
- 10. statusnet - 時間間隔の経過後にページコンテンツを更新する
- 11. 一定の時間間隔でグラフ/プロットを更新する
- 12. 位置情報サービスの更新間隔Android
- 13. 既存のDataTableからのデータポイントの更新設定間隔
- 14. 迅速にタイマー間隔を更新するには?
- 15. CMMotionManagerの複数インスタンス、更新間隔の決定
- 16. 融合したプロバイダによる更新場所の間隔
- 17. 細かい間隔ですべてのタイムスタンプを更新する
- 18. 間隔の後にページを更新する
- 19. 複数の情報ウィンドウを間隔で更新する
- 20. グローバル変数更新間隔の構成要素
- 21. $ scope更新間隔で角がちらつく場合
- 22. 間隔をあけてページを更新する
- 23. 間隔があるKnockout.jsとTwitterfeedの更新ページ
- 24. Angular2間隔1のhttp.getはビューを更新しません
- 25. スカラ実間隔、Int間隔
- 26. matlabの間隔間隔
- 27. UIPanGestureRecognizerでUIViewのフレームが更新されない
- 28. JavaScriptワーカーを使用してDOMオブジェクトを時間間隔で更新する
- 29. ムニングラフの更新間隔を変更することはできますか?
- 30. 時間間隔
パンジェスチャーがUIColorを操作するコードを送信できますか? –