iPhone UITableView与Cell ImageView一起缓慢滚动

iPhone UITableView与Cell ImageView一起缓慢滚动,iphone,uitableview,uiimageview,Iphone,Uitableview,Uiimageview,当我为每个单元格设置了图像时,我的应用程序滚动速度非常慢。我尝试过使用SDImageWeb项目,但它的滚动速度仍然很慢,单元格上的所有图像视图最终都会被拉伸。这是我在第二排牢房的代码 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; UITableV

当我为每个单元格设置了图像时,我的应用程序滚动速度非常慢。我尝试过使用SDImageWeb项目,但它的滚动速度仍然很慢,单元格上的所有图像视图最终都会被拉伸。这是我在第二排牢房的代码

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

static NSString *CellIdentifier = @"Cell";

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


}



RSSEntry *entry = [_allEntries objectAtIndex:indexPath.row];

//root path of image...used to check if image exists for this article
NSString *substring = @"http://316apps.com/ipreachersblog/wp";
NSRange textRange = [entry.articleImage rangeOfString:substring];

if(textRange.location != NSNotFound){
    NSString *thearticleImage = entry.articleImage;
    NSRegularExpression *expression = [NSRegularExpression regularExpressionWithPattern:@"(?i)\\b((?:[a-z][\\w-]+:(?:/{1,3}|[a-z0-9%])|www\\d{0,3}[.]|[a-z0-9.\\-]+[.][a-z]{2,4}/)(?:[^\\s()<>]+|\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\))+(?:\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\)|[^\\s`!()\\[\\]{};:'\".,<>?«»“”‘’]))" options:NSRegularExpressionCaseInsensitive error:NULL];
    NSString *someString = thearticleImage;
    NSString *oneurl = [someString substringWithRange:[expression rangeOfFirstMatchInString:someString options:NSMatchingCompleted range:NSMakeRange(0, [someString length])]];
    NSURL *picimage = [NSURL URLWithString:oneurl];
    UIFont *cellFont = [UIFont fontWithName:@"ArialRoundedMTBold" size:15];

    UIFont *cellFont2 = [UIFont fontWithName:@"ArialRoundedMTBold" size:12];    
    NSData * urlData = [NSData dataWithContentsOfURL: picimage];
    UIImage * imageweb = [UIImage imageWithData: urlData];
    CGSize newSize = CGSizeMake(69, 69);
    UIGraphicsBeginImageContext( newSize );
    [imageweb drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
    UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    CALayer * l = [cell.imageView layer];
    [l setMasksToBounds:YES];
    [l setCornerRadius:11];
    [l setBorderWidth:2.0];
    [l setBorderColor:[[UIColor blackColor] CGColor]];
    cell.textLabel.text = entry.articleTitle; 

    cell.textLabel.font = cellFont;
    cell.detailTextLabel.font = cellFont2;
    cell.imageView.image = newImage;
    cell.imageView.contentMode = UIViewContentModeScaleAspectFill;


}
else    {
 //loads when no featured image present

}


return cell;
}
-(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath{
静态NSString*CellIdentifier=@“Cell”;
UITableViewCell*单元格=[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
如果(单元格==nil){
cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle重用标识符:CellIdentifier]自动释放];
}
RSSEntry*entry=[\u allEntries objectAtIndex:indexPath.row];
//映像的根路径…用于检查本文是否存在映像
NSString*子字符串=@“http://316apps.com/ipreachersblog/wp";
NSRange textRange=[entry.articleImage rangeOfString:substring];
if(textRange.location!=NSNotFound){
NSString*thearticleImage=entry.articleImage;
(i)b(a-a-z[[[[a-z[[[[[[a-z][[[[[[w-]][[[w-]][[w-]以下以下以下以下以下以下以下以下国家国家的政府监管部门将向向向政府当局发表的政府监管监管部门表达*表达表达=[[[[[[nsrregregregregreg勒勒勒勒勒勒强强强强强强强强强强表达表达表达表达表达表达表达政府政府政府[[[[[[[[[[[[[[[[[[[[[nsrregreg勒强强表达表达表达表达表达表达表达表达表达表达表达表达政府]]]]]]的[[[[[[[[[[[[[[[[[[1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.\([^\\s()]+\\)*\)\[^\\s`!()\[\]{};:“\”,«»“]))“选项:nsregularexpressioncase不敏感错误:NULL];
NSString*someString=ArticleImage;
NSString*oneurl=[someString substringWithRange:[expression rangeOfFirstMatchInString:someString选项:NSMatchingCompleted range:NSMakeRange(0,[someString长度])];
NSURL*picimage=[NSURL URLWithString:oneurl];
UIFont*cellFont=[UIFont fontWithName:@“ArialRoundedMTBold”大小:15];
UIFont*cellFont2=[UIFont fontWithName:@“ArialRoundedMTBold”大小:12];
NSData*urlData=[NSData dataWithContentsOfURL:picimage];
UIImage*imageweb=[UIImage imageWithData:urlData];
CGSize newSize=CGSizeMake(69,69);
UIGraphicsBeginImageContext(新闻大小);
[imageweb drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
UIImage*newImage=UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsSendImageContext();
CALayer*l=[cell.imageView层];
[l setMasksToBounds:是];
[l:半径:11];
[l:宽度:2.0];
[l setBorderColor:[[UIColor blackColor]CGColor]];
cell.textlab.text=entry.articletTitle;
cell.textlab.font=cellFont;
cell.detailTextLabel.font=cellFont2;
cell.imageView.image=newImage;
cell.imageView.contentMode=UIViewContentModeScaleAspectFill;
}
否则{
//当不存在特征图像时加载
}
返回单元;
}

有什么想法吗?

您正在从远程源下载图像,因此每次加载新单元时,图像都会被下载,这会降低您的应用程序速度,苹果公司有一个关于该图像的示例项目,问题就在这里

NSURL *picimage = [NSURL URLWithString:oneurl];
UIFont *cellFont = [UIFont fontWithName:@"ArialRoundedMTBold" size:15];

UIFont *cellFont2 = [UIFont fontWithName:@"ArialRoundedMTBold" size:12];    
NSData * urlData = [NSData dataWithContentsOfURL: picimage];
UIImage * imageweb = [UIImage imageWithData: urlData];
CGSize newSize = CGSizeMake(69, 69);
UIGraphicsBeginImageContext( newSize );
[imageweb drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
CALayer * l = [cell.imageView layer];
[l setMasksToBounds:YES];
[l setCornerRadius:11];
[l setBorderWidth:2.0];
[l setBorderColor:[[UIColor blackColor] CGColor]];
每次滚动视图时,有3个单元格正在下载图像。这里您正在调整图像的大小,这是不推荐的

您需要像这样在延迟加载中设置映像

[cell.imageView setImageWithURL:picimage placeholderImage:[UIImage imageNamed:@"loadingPicture.png"]];
一切都会由这件事来处理。您可以通过导入此
SDImageCache
类来获得此信息,它将在以下示例代码中提供: