每次用户滚动uitableview时,我都会返回一个图像。这段代码在里面:
- (UITableViewCell *)tableView:(UITableView *)aTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
正在调用的代码如下所示,并为指定的图像创建阴影:
-(UIImage*)imageWithShadowForImageRight:(UIImage *)initialImage {
CGColorSpaceRef colourSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef shadowContext = CGBitmapContextCreate(NULL, initialImage.size.width + 10, initialImage.size.height + 10, CGImageGetBitsPerComponent(initialImage.CGImage), 0, colourSpace, kCGImageAlphaPremultipliedLast);
CGColorSpaceRelease(colourSpace);
CGContextSetShadowWithColor(shadowContext, CGSizeMake(5,-5), 10, [UIColor blackColor].CGColor);
CGContextDrawImage(shadowContext, CGRectMake(0, 10, initialImage.size.width, initialImage.size.height), initialImage.CGImage);
CGImageRef shadowedCGImage = CGBitmapContextCreateImage(shadowContext);
CGContextRelease(shadowContext);
UIImage * shadowedImage = [UIImage imageWithCGImage:shadowedCGImage];
CGImageRelease(shadowedCGImage);
return shadowedImage;
}
上面的代码使滚动变慢并且不平滑。有没有办法通过更改代码来克服这个问题,以便它可以更快地加载图像?
任何帮助表示感谢。
答案 0 :(得分:1)
你是对的,这个是用于平滑滚动的make-or-break功能。你需要尽可能快地计算它。
例如,您可以为imageWithShadowForImageRight:
方法处理的图像添加缓存:设置NSCache
的实例来存储已处理的图像;通过索引路径键入它们,并避免在滚动过程中多次重新安排同一图像时重新计算。
-(UIImage*)imageWithShadowForImageRight:(UIImage *)initialImage atIndexPath:(NSIndexPath*) indexPath {
UIImage *res = [cache objectForKey:indexPath];
if (!res) {
// get the shadowed image
res = shadowedImage;
[cache setObject:res forKey:indexPath];
}
return res;
}
答案 1 :(得分:0)
您可以使用静态阴影图像,还是需要为每张图像单独渲染?动态阴影是一项昂贵的操作,尤其是滚动操作。
另外,您可以在viewDidLoad中为所有图像调用此方法吗?这样,您不必渲染阴影,同时还要花费计算时间来绘制滚动视图并填充表格单元格。