問題タブ [setneedsdisplay]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
32826 参照

ios - サブビューの再読み込み/更新 - setNeedsDisplay が機能しない

setNeedsDisplay に問題があります。私は、Interface Builder で作成された、多くのサブ UIView を持つ UIView を持っています。IBAction のボタンもあります。この IBAction では、すべての UIView (または、UILabel、UIWebView などのすべての UIElements..) を再描画/リロードしたいと考えています。

私はこれをやっていますが、私にはうまくいきません.理由はわかりません..:

すべての UIElements/UIViews および Subviews を再描画/再読み込み/更新するにはどうすればよいですか?

編集1:

ビューをロードする方法:

detailviewcontroller には、viewcontroller がなく、uiview だけがあり、ここに階層があります。

  • UIView
    -- UIViewContainer
    --- UIView0
    --- UIView1
    --- UIViewStapel

私が期待していること:

* UIView をリセットしたくありません。背景とその内容を変更したいです。*

詳細ビューには多くのサブビュー (uiview) があります。上記の階層を参照してください。UIViews にコンテンツを表示しています。コンテンツは coreData から取得されます。
view1 には、coreData の現在の行が含まれています。
view0 には、coreData の前の行が含まれています。
viewStapel には、coreData の次の行が含まれています。

IBAction を使用して、coreData 行を反復処理し、アクションが呼び出された場合に現在の次の行を表示したい..など..

ログでは、データは変更されますが、UIViews には表示されません。この原因は、現在のデータを表示するために、再描画またはリロードなどが必要です。

EDIT 2:
解決済みコードを新しいメソッドに入れ、このメソッドを呼び出すと問題が解決しました。

0 投票する
2 に答える
1629 参照

objective-c - UIScrollView setNeedsDisplay が機能しない、または何か他のものですか?

この問題の最終的な解決策は、質問の下に記載されています

私の目標は、最初にスクロール ビュー内に各画像ビューを作成する画像ピッカーを作成し、その画像ビューの参照を、適切な画像で imageview.image を非同期に更新するメソッドに渡すことです。

これはそのままでうまく機能します。

私が遭遇する問題は、スクロールビューがメソッドの最後にバッチで画像ビューのみを表示するのに対し、作成時に1つずつ印刷したいということです(画像が利用可能かどうか)。

scroll view をタッチして scroll すると、思い通りに動作しますが、まったくタッチしないと、画像ビューだけでなくすべての画像の読み込みが完了するまで画面が白いままになります。

self.view、scrollview、および個々の imageview を含むすべてのビューに対して、setNeedsDisplay をどこにでも配置しようとしました。どうしたの?

2012 年 2 月 7 日 15:26 に編集

これらの変更により、質問で指定されたコードに関連するすべての問題が修正されました

私を正しい方向に向けてくれた@Eugeneに感謝します

0 投票する
1 に答える
1521 参照

ios - cellForRowAtIndexPath: メイン スレッドで呼び出しても、バックグラウンドでダウンロードされた画像に対して setNeedsDisplay が機能しない

setNeedsDisplayメインスレッドで呼び出してより速く表示するために、画像を非同期的にダウンロードするブロック内で次のようなものを使用することを提案するいくつかの投稿を見てきました。

以下に示すようにこれを試していますが、画像がダウンロードされるとすぐに表示されません。通常、約 4 ~ 5 秒の遅延があります。特定の行を選択すると、他の行がまだ表示されていないときに画像が表示されるため、これを知っています。

ちなみに、以下のNSLog(@"background");NSLog(@"main thread");の呼び出しは、最初の 6 セルの呼び出しに対して次の順序で出力されます。しかし、まだ動作しません:

何か案は?

0 投票する
2 に答える
348 参照

cocoa-touch - Cocoa - iOS - UILabel のテキスト プロパティを更新するには、setNeedsDisplay が必要ですか?

私は初心者で、UILabel フィールドのテキスト プロパティを設定する iOS プロジェクトを持っています。

質問

  • 新しいテキスト値を表示するには、ラベルの setNeedsDisplayInRect を呼び出す必要がありますか?

いくつかのテストに基づく私の理解:

  • setNeedsDisplayInRect を呼び出さずに、ラベルのテキストが更新されました。
  • しかし、それが偶然だったのか、明示的にsetNeedsDisplayを呼び出さずにラベルが新しい値を表示することが保証されているのかを知りたい

ありがとう

0 投票する
2 に答える
1198 参照

iphone - iOS:CGContextRefdrawRectが入力に同意しません

背景:ユーザーがどこかをタッチアップしたときにブロックを描画したいと思います。ブロックがあれば消したいです。NSMutableArrayブロックがどこに行くべきかを追跡するためにを使用してブロックを管理します。ユーザーがタッチするたびに、タッチ場所にすでにブロックが含まれているかどうかが判断され、それに応じて配列が管理されます。

問題:これから非常に奇妙なフィードバックがありました。まず第一に、配列内のすべてが私が望むように機能します。問題は、ユーザーがブロックを消去したいときに発生します。配列は正しく維持されていますが、図面は配列の変更を無視しているようです。最後のドット以外は削除されません。そして、それでも、ユーザーが他の場所をクリックすると、点滅がオンとオフに切り替わります。

コードは次のとおりです。

scaleは16として定義され pointArrayます。はビューのメンバー変数です。

テストするには:これを任意のUIViewにドロップし、それをviewControllerに追加して、効果を確認できます。

質問:図面を配列と一致させるにはどうすればよいですか?


更新+説明:私はこのアプローチのコストを認識していますが、それは私が簡単に把握するためにのみ作成されています。実際のアプリケーションでは使用されませんので、高価なことにこだわらないでください。この機能を作成したのは、描画した図形のNSString( )の値を取得するためだけです。@"1,3,5,1,2,6,2,5,5,..."これは、実際に再描画せずに使用すると、より効率的になります。尋ねられた質問に固執してください。ありがとうございました。

0 投票する
1 に答える
248 参照

ios5 - MainStoryboard のビューに基づく tableView を再読み込みして表示します

先週からアッパーの解決策を探していますが、インターネット上で解決策が見つかりませんでした。だから私はここで助けを得るだろうと思った。

ここで質問することがあります: MainStoryboard があり、その中に View を持つ ViewController があります。そのビューに、tableView を配置しました。ViewController.h

ViewController.m 合成したので、ビューが表示されている間にリロードして表示したいと思います。結果なしでテストした次のこと:[tableView reloadData]; [self.tableView reloadData]; [self.tableView setNeedsDisplay]; そして、使用した場合[self.view setNeedsDisplay];、次のエラーが発生しました:

キャッチされていない例外 'NSInternatlInconsistencyExeption' が原因でアプリを終了しています。例外をスローする (lldb)

そうです、ストーリーボードを使用したため、NIB ファイルはありません。誰かアイデアがありますか?

私が見つけた唯一のことは、ストーリーボード内のビューのボタンでビューをリロードすると、tableView がリロードされ、リロードが完了するということですが、それは解決策ではありません。

でそのために何かできます-(void)prepareForSegue:(UIStoryboard *)segue sender:(id)senderか?私が今までポップオーバーにのみ使用しているその方法。

0 投票する
5 に答える
47702 参照

ios - iOS で setNeedsDisplay を呼び出す必要があるのはいつですか?

iOS アプリを作成するとき、正確にいつ呼び出す必要があるかについて混乱していますsetNeedsDisplayか? UIの更新/再描画に関係があることは知っています。ただし、ビューを変更するたびにこれを呼び出す必要がありますか?

たとえば、次のように呼び出す必要がありますか。

  • プログラムでテキスト フィールドのテキストを変更した後
  • ビューの背景を変更するときは?
  • viewDidLoad に変更を加えると?
  • viewDidAppear ではどうですか?

この方法をいつ使用するかについて、一般的なガイドラインを誰かに教えてもらえますか?

0 投票する
2 に答える
432 参照

ios - 複数の地域でのiOSsetNeedsDisplay

ピアノの鍵盤が内部に描かれたカスタムビューがあります。各キーは個別の呼び出しとして描画されるため、再描画が必要なキーのみを描画できます。ビューはマルチタッチをサポートしているため、一度に複数のキーを押し続けることができます。

各キーの描画には多少コストがかかるため、ビュー全体の再描画(顕著な遅延が発生する)を回避するために、ビューでタッチが検出されるたびに特定の領域をsetNeedsDisplayに渡します。

複数のタッチを処理するために、受信したタッチのセットを繰り返し処理し、各タッチがいずれかのキー内にあるかどうかを確認し、含まれている場合は更新して、そのキーの長方形でsetNeedsDisplayを呼び出します。つまり、setNeedsDisplayは、1つの関数で複数回呼び出されますが、毎回異なるrectで呼び出されます。

私が期待した動作は、drawRectが異なるダーティ領域で複数回呼び出されることでしたが、左端と右端のキーを同時に押すと、左端だけでなく、ビュー全体が再描画されるようです。および右端のキー(のように、その間のすべてのキーが不必要に再描画されます)。

私が望むことを達成するために私は何ができますか?2つの汚れたキーの間にあるすべてのキーではなく、触れたキーだけを描画したいと思います。

0 投票する
2 に答える
837 参照

objective-c - 大きなUIViewでsetNeedsDisplayを引き起こす

サイズが約 3000x3000 の非常に大きな UIView があります。この大きなビューでは、iPad でスタイラスまたは指を使って自由な形の描画を行っています。これが私のタッチの開始メソッドと移動メソッドのコードです。

これは、アプリがsetNeedsDisplayを呼び出すため、十分に呼び出されないため、問題を引き起こしているように見える私のタッチ移動メソッドです

ここに、描画を表示する drawRect メソッドがあります

フリーフォーム モードで描画すると、アプリの動作が非常に遅くなります。ビューが大きすぎて、タッチ移動メソッドが呼び出されるたびに setNeedsDisplay がビュー全体をリロードしているためだと思います。setNeedsDisplay メソッドを高速化して、自由形式の描画が iPad で遅れないようにする方法はありますか。全体をリロードせずに、描画が行われているコンテキストをターゲットにすることはできますか? サイズを約 1000x1000 に調整すると、ラグの問題はありません。

この件についてご協力いただきありがとうございます。

-SetNeedsDisplayinRectを使用して編集を試みました

UIView は UISCrollview 内にラップされており、コードは次のとおりです。

このアプローチ方法も役に立ちません。

あなたが助けてくれるなら、もう一度感謝します。

0 投票する
1 に答える
1075 参照

cocoa - drawRect: 親ビューがレイヤーでサポートされている場合、 setNeedsDisplay:YES の後に常に呼び出されるとは限りません

NSCollectionView赤い背景を描画するためにオーバーライドするカスタムを備えた基本的な Cocoa アプリがありますdrawRect:(説明目的で)。

drawRect:を呼び出したにもかかわらず、一見ランダムな時間にが呼び出されないことに気付きましたsetNeedsDisplay:YES。それ以外の場合は機能し、コレクション ビューの背景が赤くなりました。

数時間かかりましたが、ビュー階層の上位にある親ビューの 1 つがレイヤーに基づくビューであることに気付きました (要素に影を追加するために、Interface Builder で「コア アニメーション レイヤー」をチェックしました)。 .

その親ビューをレイヤーバッキングを使用しないように変更すると、すぐに問題が解決され、drawRect:常に期待どおりに呼び出されます。

私を困惑させているのは、親ビューでレイヤーバッキングを有効にするdrawRect:と、常にではなく、時々呼び出されることです。

親ビューがレイヤーでサポートされている場合、サブビューで確実にオーバーライドできない と想定する必要がありますか?drawRect: