0

ストーリーボードとコードを組み合わせて UI をセットアップする傾向があります。私はしばらくの間 Objective-C に触れていませんでしたが、UI コードを適切に動作させることを覚えています。(これを行わず、viewDidLoad の下の uiSetup の下にコードを配置した場合、または performSelectorOnMainThread なしで [self uiSetup] を呼び出した場合でも、遅延読み込みのためにコードは実行されません)

[self performSelectorOnMainThread:@selector(uiSetup) withObject:nil waitUntilDone:NO];

そして、「uiSetup」では、このようなもの...

- (void)uiSetup
{
    NSArray *colors = [NSArray arrayWithObjects:[UIColor redColor], [UIColor greenColor], [UIColor blueColor], nil];
    for (int i = 0; i < colors.count; i++) {
        CGRect frame;
        frame.origin.x = self.scrollView.frame.size.width * i;
        frame.origin.y = 0;
        frame.size = self.scrollView.frame.size;

        UIView *subview = [[UIView alloc] initWithFrame:frame];
        subview.backgroundColor = [colors objectAtIndex:i];
        [self.scrollView addSubview:subview];
    }

    self.scrollView.contentSize = CGSizeMake(self.scrollView.frame.size.width * colors.count, self.scrollView.frame.size.height);
}

私はこのプロジェクトを適切に実行しようとしているので、これを行うためのより効率的な方法はあるのでしょうか? オーバーライドする必要がある別のメソッドでしょうか?

4

3 に答える 3

0

次のようにオーバーライドできるはずですviewDidLoad

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self uiSetup];
}

を呼び出し[super viewDidLoad];て、所有しているクラスがストーリーボードのビュー コントローラーのクラスとして選択されていること、およびストーリーボードscrollViewのスクロール ビューに接続していることを確認してください。

viewDidLoadは常に UI (メイン) スレッドで呼び出されるため、使用する理由はありません。performSelectorOnMainThread

于 2013-03-16T22:15:18.430 に答える
0

はい、まさにそれが、ストーリーボードとプログラム設定を組み合わせる方法です。ファミリから適切な関数を選択してください: viewDidLoad: viewWillApear: viewDidAppear:. performSelectorOnMainThread: withObject: waitUntilDone:また、関数を呼び出すために を使用する必要はありませんuiSetup。問題がある場合は、それについて別の質問を投稿することを検討してください。

于 2013-03-16T21:58:53.473 に答える
0

ストーリーボードで Autolayout が有効になっているようですが、uiSetup メソッドはゼロ以外のフレーム値に依存しています。Autolayout では、フレームは viewDidLoad では計算されませんが、ライフ サイクルの後半で計算されます。performSelectorOnMainThread 呼び出しを追加すると、メイン スレッドの uiSetup への呼び出しがキューに入れられるため、レイアウトが完了した後に実行されます。

また:

  • Autolayout 制約または固定フレーム サイズを使用するように uiSetup メソッドを変更します (これは私の好みのオプションです。私はautolayout 愛好家です。
  • から呼び出しviewDidLayoutSubviewsます(このメソッドはより頻繁に呼び出されるため、注意する必要があります)またはviewDidAppear
  • ストーリーボードで Autolayout をオフにします (ここで説明されているように.
于 2013-03-17T07:32:17.103 に答える