1

UIViewがあり、そのコンテンツをから描画していますdrawRect()が、描画中に実行される計算によっては、ビューのサイズを変更する必要がある場合があります。

サイズを変更すると、描画の継ぎ目が拡大縮小され、サイズ変更によって得られた追加のサイズは使用されません。

これが私がフォームのサイズを変更する方法ですdrawRect()

 CGRect limits = self.frame ;
 limits.size.width = 400;
 self.frame = limits;

コンテキストがサイズ変更を認識せず、古いサイズを使用して描画しているように見えます。サイズ変更後に既に試し[self setNeedsDisplay]ましたが、drawメソッドが再度呼び出されません。

4

2 に答える 2

1

パフォーマンス上の理由だけで、描画中ではなく事前に計算を行う必要があります (ただし、初期の計算でもこの問題は回避されます)。

たとえば、計算が要因XYおよびに依存している場合、 、またはZに変更があるたびにそれらの計算をやり直すように手配します。必要に応じて計算結果をキャッシュし、その時点でビュー フレームのサイズを変更します。実装は、指定された領域にのみ描画する必要があります。XYZdrawRect:

于 2012-07-07T06:20:13.327 に答える
0

そんなことで悩んでいる方へ。

どうやら [self setNeedsDisplay] は、drawRect: (または drawRect: から呼び出されたメソッド) から呼び出された場合、何の効果もありません。どういうわけか、通話をスキップするだけです。

物事を実現するには、代わりに以下を使用してください

[self performSelector:@selector(setNeedsDisplay) withObject:nil afterDelay:0];

これは、メイン キューが再び解放されたときに呼び出されます。drawRect 内で needsDisplay を呼び出すための条件を必ず使用してください。そうしないと、ループしてしまいます。

于 2013-02-04T13:16:33.390 に答える