2011-10-19 11 views
1

私はUITableViewを持っており、セルにカスタムビューを追加しています。それは本当に遅れますが、ちょうど2つの細胞です。ここを見て、それを上下にスクロールすると、私はそれがぎこちない/遅れているのを見ることができます(これはiPhone 4sにあります)。私はApp Storeアプリを見て、非常に複雑なtableviewcellを使ったスクロールは非常に滑らかです。私は何か間違っているのですか?ここでUITableViewは本当にちょうど2つのセルで遅れます

は私のコードです:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 
    int row = [indexPath row]; 


    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease]; 
     [cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator]; 


     UILabel *labelBarcode = [[UILabel alloc] initWithFrame:CGRectMake(80, 7, 150, 15)]; 
     [labelBarcode setFont:[UIFont fontWithName:@"Helvetica-Bold" size:16]]; 
     [labelBarcode setTag:10]; 

     UILabel *labelLength = [[UILabel alloc] initWithFrame:CGRectMake(80, 22, 150, 15)]; 
     [labelLength setFont:[UIFont fontWithName:@"Helvetica" size:14]]; 
     [labelLength setTag:11]; 

     UILabel *labelThickness = [[UILabel alloc] initWithFrame:CGRectMake(80, 37, 150, 15)]; 
     [labelThickness setFont:[UIFont fontWithName:@"Helvetica" size:14]]; 
     [labelThickness setTag:12]; 

     UILabel *labelDiameter = [[UILabel alloc] initWithFrame:CGRectMake(190, 22, 100, 15)]; 
     [labelDiameter setFont:[UIFont fontWithName:@"Helvetica" size:14]]; 
     [labelDiameter setTag:13]; 

     UILabel *labelCoating = [[UILabel alloc] initWithFrame:CGRectMake(190, 37, 100, 15)]; 
     [labelCoating setFont:[UIFont fontWithName:@"Helvetica" size:14]]; 
     [labelCoating setTag:14]; 

     UIImageView *thumbView = [[UIImageView alloc] initWithFrame:CGRectMake(4, 4, 65, 50)]; 
     [thumbView setContentMode:UIViewContentModeScaleToFill]; 
     [thumbView setTag:15]; 


     [[cell contentView] addSubview:thumbView]; 
     [[cell contentView] addSubview:labelBarcode]; 
     [[cell contentView] addSubview:labelLength]; 
     [[cell contentView] addSubview:labelThickness]; 
     [[cell contentView] addSubview:labelDiameter]; 
     [[cell contentView] addSubview:labelCoating]; 

     [thumbView release]; 
     [labelBarcode release]; 
     [labelLength release]; 
     [labelThickness release]; 
     [labelDiameter release]; 
     [labelCoating release]; 

    } 
    UILabel *labelBarcode = (UILabel *)[[cell contentView] viewWithTag:10]; 
    UILabel *labelLength = (UILabel *)[[cell contentView] viewWithTag:11]; 
    UILabel *labelThickness = (UILabel *)[[cell contentView] viewWithTag:12]; 
    UILabel *labelDiameter = (UILabel *)[[cell contentView] viewWithTag:13]; 
    UILabel *labelCoating = (UILabel *)[[cell contentView] viewWithTag:14]; 
    UIImageView *thumbView = (UIImageView *)[[cell contentView] viewWithTag:15]; 

    NSDictionary *pipe = [pipes objectAtIndex:row]; 


    NSString *stringBarcode = [pipe objectForKey:@"Barcode"]; 
    NSString *stringLength = [NSString stringWithFormat:@"Length: %@", [pipe objectForKey:@"Length"]]; 
    NSString *stringThickness = [NSString stringWithFormat:@"Wall: %@",[pipe objectForKey:@"Thickness"]]; 
    NSString *stringCoating = [NSString stringWithFormat:@"Coating: %@", [pipe objectForKey:@"Coating"]]; 
    NSString *stringDiameter = [NSString stringWithFormat:@"Diameter: %@",[pipe objectForKey:@"Diameter"]]; 


    [labelBarcode setText:stringBarcode]; 
    [labelLength setText:stringLength]; 
    [labelThickness setText:stringThickness]; 
    [labelDiameter setText:stringDiameter]; 
    [labelCoating setText:stringCoating]; 
    [thumbView setImage:[UIImage imageWithData:[pipe objectForKey:@"Thumbnail"]]]; 

    return cell; 
} 

私はのUITableViewControllerをロードする際にタイムラグが特に発生します。私は何も割り当てられていないことに注意してください、私は、アプリケーションが読み込まれるときにのみ(plistから)データを割り当て、アプリケーションのメモリ消費量はすべて1.56MBです。

答えて

0

何らかのタイプのサイズ変更を行っているイメージビューを持つことに関連する同様の問題がありました。私はまずそれをチェックしたいと思います。 thumbViewがサイズ変更を行っている場合は、それ自体がスクロール中にテーブルのラグを引き起こす可能性があります。その場合は、サイズを変更してイメージを正しいサイズにプレレンダリングしてみてください。私はちょうどあなたが実際にテーブルから引き出されている細胞のいずれかを取得していない2つの細胞だけで、ここに仮定しています。イメージを作成する時間についての他の答えは、セルを再利用するときにのみ複数回実行する場合にのみ実際に適用されます。

0

このコード行:

[thumbView setImage:[UIImage imageWithData:[pipe objectForKey:@"Thumbnail"]]]; 

が阻止され、それがどのくらいのデータに応じて、多くの時間を取ることができます。バックグラウンドスレッドで(おそらくNSOperation経由で)行い、イメージが準備されたらその行をリロードしてください。

0

は再利用条件の内部

[thumbView setImage:[UIImage imageWithData:[pipe objectForKey:@"Thumbnail"]]];

を入れてみてください。

+0

それぞれのパイプにおそらく異なるサムネイルがあるので、これは適切ではありません。メインのスレッドでもそのコードを実行していますが、パフォーマンスが低下します。 –

+0

Ahh ok - 私はコードを間違って読みました。間違いです。サムビューはいつも同じだったという印象を受けました。 – barfoon

関連する問題