問題タブ [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 投票する
1 に答える
215 参照

objective-c - 日付変更時に再表示をトリガーする

これはおそらく簡単な質問ですが、私は初心者なので、空白を描いています。

グラフィック(drawRectで実装)が日付に依存する2Dグラフィカルアプリケーションがあります。日付が変わるとグラフィックも変わるので、電話する必要があると思います

日付が変わるとき。タイマーのコードを見たことがありますが、これはタイマータイプのシナリオではないようです。ローカル日付が変更されたかどうかを確認するにはどうすればよいですか?また、そのコードをどのクラスに配置しますか?メインビューの.mファイルに含まれると思います。

日付の変更時に自動的にトリガーされることに加えて、最終的には、アプリはユーザー入力(おそらく、ある日、または日付ピッカーの選択時に前後に移動するボタン)でトリガーする必要があります。

グラフィックはそのままで問題なくレンダリングされますが、日付トリガーはコーディングしていません。そのため、drawRectコードは日付固有ですが、日付が変更されても変更されません。

PS上記の私の基本的な質問は答えられましたが、それを実装しようとすると、別の問題があることに気付きます。構成が現在表示されている日付を追跡するためのプロパティがどこかにあるはずです。明らかなアイデアは、NSDateオブジェクトを保持するメインビューにプロパティを追加することです。しかし、私が物事をコーディングした方法では、計算はサブビュークラスのメソッドによって行われます。したがって、問題は、サブビューからメインビューのNSDateプロパティを更新する方法です。別の方法は、サブビューにNSDateプロパティを追加することですが、そのようなサブビューは複数あり、冗長であるように見えます。これについて何か意見はありますか?

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

objective-c - setNeedsDisplayは、期待どおりにサブビューでdrawRectをトリガーしません

私はに苦労していsetNeedsDisplayます。drawRect:ビューの範囲内にある場合は、呼び出されたビューとその下の階層の呼び出しをトリガーすることになっていると思いましたが、そうではありません。これが私の設定です:

アプリケーションデリゲートから、基本的に画面全体をカバーする正方形のサイズのビューを作成します。このビューはと呼ばれTrollCalendarViewます。TrollCalendarViewコンパスによってトリガーされる回転を除いて、発生することはあまりありません。

の中心の周りに7面の配置で配置された2D描画オブジェクトを含むことを目的としたTrollCalendarViewcalledの7つのサブビューがあります。したがって、iPadを回転させると、これらの7つのビューは、常に基本的な方向を向くように回転します。PlatformViewTrollCalendarView

各サブビューには、PlatformViewと呼ばれる3つのサブビューが含まれていますTower。各タワーには、で実装された2D描画オブジェクトが含まれていdrawRect:ます。

したがって、要約TrollCalendarViewすると、空drawRect:の、サブビューPlatformView、およびPlatformview-> Towerがあり、それぞれにdrawRect実装があります。さらに、TowerはPlatformの範囲内にあり、PlatformはTrollCalendarViewの範囲内にあります。

TrollCalendarViewスワイプレコグナイザーを追加しました。スワイプが発生すると、プロパティが更新され、呼び出します[self setNeedsDisplay]が、何も起こらないようです。drawRect:これらの各ビューのメソッドにNSLogエントリを追加すると、TrollCalendarView drawRect:メソッドのみが呼び出されます。皮肉なことに、それはdrawRectメソッドが空になる1つのビューです。

xibファイルはありません。

drawRect他のサブビューのメソッドが呼び出されるようにするには、何をする必要がありますか?これに影響を与える可能性のあるすべてのニュアンスを説明するドキュメントがどこかにありますか?

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

iphone - setNeedsDisplayはdrawRectを呼び出しません

重要:

私は問題を理解しましたが、モデレーターが何らかの理由でそれを削除しました:

ビューコントローラに関数を含めるのではなく、ボタンから直接関数を呼び出してみました。

なぜうまくいかなかったのかまだよくわかりませんので、その質問への回答を受け付けます。

メインポスト

UIButtonを押した後、描画を行おうとしています。私の描画はUIViewのサブクラスで行われます。ViewControllerにこのサブクラスのインスタンスがあります。また、サブクラスの関数を呼び出すUIButtonがViewControllerにあります。その関数で私は呼び出します

アプリをロードすると、ビューがロードされるときにdrawRectが1回呼び出されますが、ボタンが押されるたびにsetNeedsDisplayが呼び出されますが、再度呼び出されることはありません。私は多くの同様の質問を調べましたが、解決策は見つかりませんでした。

ここにすべてのコードを投稿します:

AEViewController.h

AEViewController.m

AEGraphView.h

AEGraphView.m

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

nsview - CIFilter が 10.8 でのみ適用された後、NSView の drawRect が呼び出されない

いくつかのサブビューを持つ NSView (メインビューと呼びましょう) があります。これらのサブビューの 1 つには、drawRect メソッドで行われる時間ベースの (タイマーを介して呼び出される) アニメーションがあります。また、メインビューにいくつかの CIFilter 効果を適用しています。

すべてが 10.6.x および 10.7.x で期待どおりに機能します (つまり、アニメーションが発生し、フィルターが適用されているのがわかります)。

この問題は 10.8 でのみ発生します。メインビューにフィルター (setContentFilters: および setWantsLayer: を使用) を適用した直後にアニメーションが停止し、(setContentFilters:nil を使用して) フィルターを削除した後にのみ再開します。私のサブビューの drawRect メソッドは、フィルターが適用されても呼び出されません...

誰かが状況に光を当てることができれば、本当に感謝しています。

ありがとうございました。

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

objective-c - setNeedsDisplay:NO はまったく役に立ちますか?

Cocoa では、ビューを再描画したい場合、setNeedsDisplay:YES のパラメーターを使用してビュー自体を再描画するようにビューに指示するメッセージをビューに送信します。setNeedsDisplay:NOマルチスレッド環境など、ビューを送信したい状況があり、ビューを送信した場合setNeedsDisplay:YES、 with の直後にもう一度設定するとsetNeedsDisplay:NO、ビュー自体が再描画されるのではないかと考えていました。を呼び出す理由がない場合setNeedsDisplay:NO、代わりに次のようなものを実装できるような退屈なメソッドを作成する理由[view redrawView]

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

objective-c - UITableViewsetRowHeight変更をコミットする方法

UITableViewCellsに。が含まれているデザインがありUIImageViewます。この画像は、縦向きでも横向きでも同じ比率である必要があります。そのため、UIDeviceOrientationDidChangeNotification通知を使用してインターフェイスの向きが変更されたときに呼び出されるメソッドがあります。

行がコメント化されていない場合、ビューが再描画され、行の高さが適切に設定されます。そうでない場合は、を使用する場合でも[self.tableView setNeedsDisplay][self.tableView setNeedsLayout]プロパティの新しい値は使用されません。

新しい値が適用されるようにUIを強制的にリロードするにはどうすればよいですか?

インターフェイスが回転して再描画される前にプロパティが設定されて-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)durationいるため、しばらくの間は機能していましたが、奇妙な理由で、このメソッドはもう呼び出されていません...rowHeight

ご協力いただきありがとうございます !

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

objective-c - 目的 C: drawRect の実装

drawRect を使用して図形を描画する非常に単純なプロジェクトがありますが、drawRect 関数が実際に呼び出されているとは思えません。これがコードです。(他のすべては、「シングル ビュー アプリケーション」のデフォルトです。)

読んでくれてありがとう!

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

ios - iOS: バックグラウンド スレッドを取得してメイン スレッドでビューを再描画する方法

私のアプリケーションはデータベースを 50 回クエリし、適切な UIImageView を別の UIImageView に追加することでそれに応じて反応します。これにより、ループごとにアプリケーションがすぐに表示されるようになります。

残念ながら、何晩も経った後、私はそれを機能させることができませんでした。アプリケーションはすぐには UIImageView を表示しません。そうは言っても、ミッドループ中にズームインまたはズームアウトすると、UIImageViewsが表示されます! 私は何かが欠けているに違いない...

これまでのところ、最後の部分 [UIScrollView performSelector.... を除くすべてのコードが機能します。

どうぞよろしくお願いいたします。

0 投票する
4 に答える
2636 参照

objective-c - CALayer setNeedsDisplay が機能しない?

私のクラスはCALayerサブクラスであり、メッセージをキャッチすると、オブザーバーを追加しました。次のNSNotificationCenterように機能します。

しかし、これは機能しません。誰か助けてもらえますか?

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

ios - SetNeedsDisplay が機能しない

この問題に関連する多くのスレッドを見ましたが、私のケースに対処するものはありませんでした (私は思います)。

私の場合は単純なはずです。コントローラーにカスタムUIViewがあり、コントローラーから [ self.myView setNeedsDisplay] を使用すると、完全に機能します。

自分自身の内部からこれを呼び出そうとすると問題が発生しUIViewます...別のクラスから送信された通知があり、渡された情報とともにビュー(これは機能します)によって受信され、内部を更新しますこのビューのプロパティsetNeedsDisplayと、新しい状態で画面を更新したい[self ] を呼び出していますが、何も起こっていません。メソッドNSLOG内でa を使用しましたdrawRecが、現時点では呼び出されていません。私のコントローラークラスが を呼び出すときに呼び出され、setNeedsDisplayそれが発生すると、以前に発生するはずだった更新が画面に表示されます...以前に更新されなかった理由がわかりません...

ここにいくつかのコードがあります:

更新を求めるコントローラー: (正常に動作します!)

図面を更新しようとしている通知方法: (動作していません!)

動作するので、ここに貼り付けていませんdrawRect。問題は、 my の内部から呼び出されていないことUIView setNeedsDisplayです !

なぜこれが機能しないのか誰にも分かりますか????