1

我有一个只有 6 个自定义单元格的 UITable。每个 CustomCell 都有一个水平滚动视图,其中包含自定义视图。每个 CustomView 上都有一个 ImageView 和 Text。

所以把它们放在一起它可能看起来像这样

UITable --> CustomCell ---> Horizo​​ntal ScrollView --> CustomView --> ImageView and 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. 当我向上和向下滚动表格几次时,我猜自定义单元格被重绘,所以没有图像的自定义单元格(即滚动视图中没有自定义视图)显示来自下方/顶部其他自定义单元格的图像。

有时应用程序崩溃,我想这是内存管理的问题。

4

2 回答 2

0

要修复显示错误图像的重用单元格,只需在调用代码以显示新图像之前删除 cellForRowAtIndexPath 中的图像。这样,如果图像被延迟,至少旧的图像已被删除或隐藏。

于 2012-05-16T22:07:26.490 回答
0

下载的图片有多大?我有类似的问题(没有额外的水平滚动),我能够通过使用图像的实际缩略图而不是实际图像(在 TableView 中)来修复它。

您可能想尝试在单独的对象中下载、缓存和创建图像的缩略图,然后让 TableViewCell 加载这些图像的缩略图而不是实际的图像。

这对我来说完美地加快了滚动速度。

于 2012-05-16T21:51:36.743 回答