1

カスタム セルが 6 つしかない UITable があります。各 CustomCell には、カスタム ビューを含む水平スクロール ビューがあります。各 CustomView には ImageView と Text があります。

全部まとめるとこんな感じかも

UITable --> CustomCell ---> Horizo​​ntal ScrollView --> CustomView --> ImageView と Text

UITable の Cell のコードは次のとおりです

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *MySecondIdentifier = @"MySecondIdentifier";
    UITableViewCell *cell2 = [tableView dequeueReusableCellWithIdentifier:MySecondIdentifier];

    if(cell2 == nil){

        cell2 = [(CustomCell* )[CustomCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MySecondIdentifier target:self row:indexPath.row parent:self]; 

    }
    [cell2 setSelectionStyle:UITableViewCellSelectionStyleNone];
    [cell2 setValueToCellViewItem:tempTitleString setOfImage:dictCatData];
    return cell2;

} 

ここで、DictCatData = データ ノードの NSMutableArray および tempTitleString = セルのタイトル文字列 (他の目的に使用)

CustomCell 値を設定する方法は次のとおりです

- (void) setValueToCellViewItem:(NSString *)pTitle setOfImage:(NSMutableArray *)catData{
[the_pScrolView setContentSize:CGSizeMake([catData count] * 107 , 107)];

int counter = 0;
for(NSDictionary *tempDict in catData){

    NSString *url = [[NSString alloc]init];
    url = [tempDict objectForKey:@"main_img_url"];
    url = [url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

    UIImageView *mSdWebImage = [[UIImageView alloc] initWithFrame:CGRectMake(counter * 107, 0, 107, 107)];
    [mSdWebImage setImageWithURL:[NSURL URLWithString:url] placeholderImage:nil];
    [mSdWebImage setBackgroundColor:[UIColor grayColor]];
    [the_pScrolView addSubview:mSdWebImage];

    ///Setting the title properties
    UILabel *the_pLable = [[UILabel alloc] initWithFrame:CGRectMake((counter * 107) + 15, 85, 97, 22)];
    the_pLable.textColor = [UIColor whiteColor];
    the_pLable.font = [UIFont fontWithName:@"Helvetica" size:10.0];
    the_pLable.numberOfLines = 1;
    the_pLable.backgroundColor = [UIColor clearColor];
    the_pLable.text = [tempDict objectForKey:@"title"];

    [the_pScrolView addSubview:the_pLable];
    counter++;

}

私は非同期ダウンロードとキャッシュにSDWebImageを使用しています。これは、ネット上で最高のものだと思います。

ScrollView には、0 から 30 以上の画像の範囲の画像を含めることができます

iPhoneでこのページを開くと、画像がダウンロードされ、適切にキャッシュされていると思います。問題なく表示できるからです。

私の問題は

  1. テーブルを上下にスクロールしようとすると、スクロールがスムーズになりません。背景画像のダウンロードとキャッシュに影響を与えずに、どうすればよりスムーズにできますか

  2. テーブルを数回上下にスクロールすると、カスタム セルが再描画されるため、画像のない CustomCells (つまり、scrollView に customViews がない) は、他のカスタム セルの画像を下/上に表示します。

アプリがクラッシュすることがありますが、これはメモリ管理の問題だと思います。

4

2 に答える 2

0

再利用されたセルに間違った画像が表示されるのを修正するには、コードを呼び出して新しい画像を表示する前に、cellForRowAtIndexPathの画像を削除するだけです。そうすれば、画像が遅れた場合でも、少なくとも古い画像は削除または非表示になっています。

于 2012-05-16T22:07:26.490 に答える
0

ダウンロードされる画像の大きさはどれくらいですか?同様の問題があり(余分な水平スクロールなしで)、実際の画像(TableView内)の代わりに画像の実際のサムネイルを使用して修正することができました。

別のオブジェクトに画像のサムネイルをダウンロード、キャッシュ、作成してから、TableViewCellに実際の画像ではなく画像のサムネイルを読み込ませるようにすることをお勧めします。

これにより、スクロールが完全に高速化されました。

于 2012-05-16T21:51:36.743 に答える