0

スクロール ビューでラベルを作成しました。for ループ回数が 1000 回を超えています。このとき、スクロールが非常に遅くなります。スクロール時のデータ量が少ない場合(200、300、...)、スムーズにスクロールします。ラベルの作成に以下のコードを使用しています。

UILabel     *modelLabel;
UIButton    *modelButton;

for (int i = 0; i < [modelArray count]; i++)
{
    modelButton                 = [UIButton buttonWithType:UIButtonTypeCustom];
    modelButton.frame           = CGRectMake(0.0, (i * LABEL_HEIGHT), LABEL_WIDTH, LABEL_HEIGHT);
    modelButton.tag             = i+100;
    [modelButton addTarget:nil action:@selector(modelButtonAction:) forControlEvents:UIControlEventTouchUpInside];
    [modelScrollView addSubview:modelButton];
    modelLabel                  = [[UILabel alloc] initWithFrame:CGRectMake(0.0, (i * LABEL_HEIGHT), LABEL_WIDTH, LABEL_HEIGHT)];
    modelLabel.text             = [NSString stringWithFormat:@"%@", [[modelArray objectAtIndex:i] valueForKey:@"Model"]];
    modelLabel.tag              = i+1000;
    modelLabel.backgroundColor  = [UIColor clearColor];
    modelLabel.textColor     = [UIColor grayColor];
    modelLabel.alpha         = 0.5;
    modelLabel.textAlignment    = UITextAlignmentCenter;
    modelLabel.font             = EUROSLITE_FONT(14);
    [modelScrollView addSubview:modelLabel];
}

[modelScrollView setContentSize:CGSizeMake(280.0, ([modelArray count] * LABEL_HEIGHT))];

この問題を解決するにはどうすればよいですか?

前もって感謝します。

4

2 に答える 2

2

あなたがメモリに多くのものをロードするので、これはあなたに起こります

上記のコメントが言ったように、それを使用して達成することは非常に簡単UITableViewです。

ただし、より詳細な制御が必要で、スクロールビューを使用することにした場合は、レイジーロードを実装する必要があります。これは、初期化中ではなく、実際に表示する必要があるときにラベルを割り当てて配置することで行われます。コントローラをデリゲートとして表示し、メソッドからcontentOffsetを取得するように設定することで、それを知ることができますscrollViewDidScroll:。また、認識した後、メモリをクリアするためにサブビューを削除する必要があります

ここでその良い例を見ることができます

于 2013-01-28T14:45:24.783 に答える
0

iosがこれらのビューを動的に作成するのではなく、大量のビューを作成してメモリに保持しようとしているからだと感じています(私はその言葉を正しく使用していますか?)。再利用識別子を持つ UITableView を使用する方がはるかに高速です。これにより、作成したビューごとに iOS が新しいメモリ割り当てを作成するのを防ぎます。再利用識別子を介して作成された、必要なラベルとボタンを使用して、カスタム UTTableViewCell を作成します。

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier 

カスタム スタイルで UITableView を作成するためのリソースがウェブ上でたくさん見つかるはずです。水平スクロールの UITableView が必要な場合は、EasyTableViewをご覧ください。

于 2013-01-28T14:44:57.957 に答える