1

コントロールのさまざまな基準とプロパティに応じてサイズを変更する必要がある UIView ベースのコントロールがあります。私がやっている方法が最善の方法であるかどうかはわかりませんが、これまでのところ、うまくいくように見える唯一の方法です. コントロールのサイズはさまざまなプロパティに依存するため、コンストラクターでサイズを設定することはできません。

setupControl: というメソッドがあります。これには、プロパティ セットに基づいてセットアップを完了するためのすべてのコードが含まれています。setupControl: を手動で呼び出したくないので、 drawRect で呼び出す必要があるかどうかを検出し、次のようにセレクターをキューに入れます。

[self performSelector:@selector(setupControl)withObject:self afterDelay:0];
return;

setupControl の下部で: 次に、次のことを行います。

[self setNeedsDisplay];
self.hidden = NO;

また、initWithFrame: および initWithDecoder: コンストラクターをオーバーライドして、セットアップ コードが実行されるまで UIView が非表示になるように設定しました。コントロールのサイズが変更されると、ディスプレイ上の「フラッシュ」を排除するという考えです。

私が言ったように、これは問題なく動作します。コントロールは xib ファイルのサイズで描画でき、実行時に正しいサイズに設定できます。

私の質問は、セレクターをキューに入れ、drawRect: を終了し、次に setNeedsDisplay を使用するこの方法がこれを行う唯一の方法であるかどうかです。O オーバーライドできるメソッドが見つかりませんでしたか? または、他の何か?

4

1 に答える 1

3

おそらくオーバーライドしたいのは、カスタム描画を実装せずにレイアウトを変更しているため、 drawRect ではなくlayoutSubviewsです。

ビューのサイズを変更するプロパティにカスタム セッターを使用し[self setNeedsLayout]、セッターを呼び出して、ビュー サイズが計算される前に layoutSubviews メソッドが呼び出されるようにする必要がある場合もあります。

于 2010-09-26T20:38:40.767 に答える