Ios UITableView中的圆形UIImage会导致速度减慢

Ios UITableView中的圆形UIImage会导致速度减慢,ios,uitableview,uiimage,Ios,Uitableview,Uiimage,当我尝试在所有自定义UITableView单元格中对UIImages进行四舍五入时,UITableView的滚动速度明显较慢,而且不流畅。有没有更好的办法 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; CustomCell *cell

当我尝试在所有自定义UITableView单元格中对UIImages进行四舍五入时,UITableView的滚动速度明显较慢,而且不流畅。有没有更好的办法

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    cell.profileLabel.text = [[demoArray objectAtIndex:[indexPath row]] objectForKey:@"name"];
 cell.imageView.image = [UIImage imageNamed:[[demoArray objectAtIndex:[indexPath row]] objectForKey:@"image"]];
    cell.imageView.layer.cornerRadius = 9.0;
    cell.imageView.layer.masksToBounds = YES;    
    return cell;
}
1) 您可以在viewDidLoad中创建圆形图像(或在数据准备就绪时),并将其保存到临时数组中。要做到这一点,您只需创建它,就像您现在所做的那样。然后将视图内容捕获到新图像中。然后,在tableview中显示新创建的图像,而不使用动态遮罩

要将viewcontents保存到图像中,可以使用以下代码:

- (UIImage*) screenshotOfView: (UIView*) view
{
    UIGraphicsBeginImageContext(view.frame.size);
    [view.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return viewImage;
}
好的,我会更具体一些。此时,您的
demoArray
中充满了数据。迭代该数组并预渲染图像。你就是这样做的(使用上述方法):

然后在
cellForTableRow
方法中,您只需使用该图像:

cell.imageView.image = [UIImage imageNamed:[[demoArray objectAtIndex:[indexPath row]] objectForKey:@"roundedImage"]];
(这段代码没有经过测试,只是写下来了…)

2) 另一个可能更快的解决方案是在
drawRect:
(通过CoreGraphics屏蔽)中的tableViewCell子类中绘制图像,但这要复杂得多

3) 按照Bartosz Ciechanowski的回答,您可以为使用CorGraphics获得的每个尺寸动态创建所需的覆盖图像。但是第一种解决方案可能是最简单的。

1)您可以在viewDidLoad中创建圆形图像(或者在数据准备就绪时)并将其保存到临时数组中。要做到这一点,您只需创建它,就像您现在所做的那样。然后将视图内容捕获到新图像中。然后,在tableview中显示新创建的图像,而不使用动态遮罩

要将viewcontents保存到图像中,可以使用以下代码:

- (UIImage*) screenshotOfView: (UIView*) view
{
    UIGraphicsBeginImageContext(view.frame.size);
    [view.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return viewImage;
}
好的,我会更具体一些。此时,您的
demoArray
中充满了数据。迭代该数组并预渲染图像。你就是这样做的(使用上述方法):

然后在
cellForTableRow
方法中,您只需使用该图像:

cell.imageView.image = [UIImage imageNamed:[[demoArray objectAtIndex:[indexPath row]] objectForKey:@"roundedImage"]];
(这段代码没有经过测试,只是写下来了…)

2) 另一个可能更快的解决方案是在
drawRect:
(通过CoreGraphics屏蔽)中的tableViewCell子类中绘制图像,但这要复杂得多


3) 按照Bartosz Ciechanowski的回答,您可以为使用CorGraphics获得的每个尺寸动态创建所需的覆盖图像。但第一种解决方案可能是最简单的。

虽然调整层的角半径当然很方便,但它可能会受到一些性能损失。就我个人而言,我会以非常直接的方式来做这件事


在任何图形编辑器中创建覆盖-使用与单元格背景相同的颜色填充角,使其与所需形状匹配。现在,在单元格中添加一个新的
UIImageView
,将其直接放置在图像上方,并确保覆盖层保持在顶部。

虽然调整图层的角半径非常方便,但它可能会受到一些性能损失。就我个人而言,我会以非常直接的方式来做这件事


在任何图形编辑器中创建覆盖-使用与单元格背景相同的颜色填充角,使其与所需形状匹配。现在将一个新的
UIImageView
添加到您的单元格中,将其直接放置在图像上方,并确保覆盖层保持在顶部。

我不明白您的答案。我的应用程序中的图像将从web下载并保存在demoArray中。我应该捕获哪些视图内容?我不明白您的答案。我的应用程序中的图像将从web下载并保存在demoArray中。我应该捕获哪些视图内容?我不能这样做,因为单元格的高度不同,并且有一个UIImage(带渐变)作为单元格背景。我不能这样做,因为单元格的高度不同,还有一个UIImage(带渐变)作为单元格背景。