3

ユーザーがその下に表示されているビューを操作するときに、丸まったビューの更新をライブにするにはどうすればよいpresentModalViewController:ですか?

私が望む行動:

  1. ユーザーが表示設定ボタンをタップします。
  2. ユーザーは、ビュー設定画面でコントロールをタップします。ビュー設定を閉じるのではなく、ビューはバックグラウンドで自動的に更新されます。
  3. ユーザーが何かをタップして、ビュー設定を閉じます。

マップで[マップ]、[衛星]、[ハイブリッド]をタップしても、自動的にカールが解除されず、表示が更新された場合を想像してみてください。

設定コントローラーからメインビューコントローラーに何かが変更されたという通知を受け取ることができます。メインビューコントローラは、それ自体の一部を再描画する必要があることを更新および通知できますが、実際には画面の更新は断続的です。それは5回続けて動作し、次に2、3回動作せず、さらに5回連続して動作します。ただし、モーダルビューを閉じると、常に下のビューが追いつきます。そのため、リクエストにもかかわらず、ビューのレンダリングされた画像がキャッシュされたり、再描画されなかったりすることがあると思います。しかし、これを検証する方法を考えることはできません。

これは、デバイスとシミュレータの両方で発生します。

4

1 に答える 1

1

この動作には複数の根本的な原因が考えられますが、UIKit ビューの更新が「遅延」または「断続的」になる一般的な問題を次に示します。

表示ビュー (または表示ビュー) を更新するステートメントがメイン キュー以外のディスパッチ キューで実行されている場合、UIKit は実際の UI 更新で一貫性のない結果とタイミングを生成する可能性があります。通常は、UI を更新するステートメントにブレークポイントを置き、Xcode の左側のデバッガー ビューに表示される「キュー」の名前を調べることでわかります。「com.apple.main-thread」である必要があります。そうでない場合は、それが問題になる可能性があります。これは、ネットワーク API などのかなりの数のデリゲート メソッドで発生する可能性があります。

UI の更新を次のようにラップしてみてください。それが役立つかどうかを確認してください! これは必要な場合にのみ行い、常にブロックセーフな手法を使用するように注意してください。

これを、iOS 7.0.3 用のまったく新しいユニバーサル アプリで、部分的なカール トランジションを使用して提示されたビュー コントローラーを備えた iPad シミュレーターを使用してテストしました。上記のコードでバックグラウンド キューを使用して、表示されたビューを閉じるときの断続的な更新や「スナップ」更新など、元の問題を再現することができました。メイン キューに切り替えると、すべてが正常に機能しました。

これが役立つかどうか、または他の問題があったかどうかを教えてください:)

于 2014-02-25T23:33:47.743 に答える