我有一个自定义的UITableViewCell子类,它显示和图像以及文本。 在显示表格视图单元格时,文本随时可用,即可下载图像。
从various places开始,我读到最好只有一个视图并在视图的drawRect方法中绘制东西,以提高性能,与拥有多个子视图(在本例中为UIImageView视图和2个UILabel视图)相比
我不想在自定义表格视图单元格drawRect
中绘制图像,因为
视图中的图像只应在有人要求显示图像时才会显示(例如,当网络操作完成且图像可供渲染时)。但是,文本是用 - drawRect
方法绘制的。
问题:
下载后,我无法在屏幕上显示图像。 我目前使用的代码是 -
- (void)drawImageInView
{
//.. completion block after downloading from network
if (image) { // Image downloaded from the network
UIGraphicsBeginImageContext(rect.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetStrokeColorWithColor(context, [UIColor whiteColor].CGColor);
CGContextSetFillColorWithColor(context, [UIColor whiteColor].CGColor);
CGContextSetLineWidth(context, 1.0);
CGContextSetTextDrawingMode(context, kCGTextFill);
CGPoint posOnScreen = self.center;
CGContextDrawImage(context, CGRectMake(posOnScreen.x - image.size.width/2,
posOnScreen.y - image.size.height/2,
image.size.width,
image.size.height),
image .CGImage);
UIGraphicsEndImageContext();
}
}
我也尝试过:
UIGraphicsBeginImageContext(rect.size);
[image drawInRect:rect];
UIGraphicsEndImageContext();
无济于事。
[self setNeedsDisplay]
之后调用UIGraphicsEndImageContext();
就足够了
确保文本呈现在图像的顶部?答案 0 :(得分:0)
你正确的事实是绘图文本会使你的应用程序更快,因为没有UILabel对象开销,但UIImageViews是高度优化的,你可能永远无法绘制图像比这堂课快。因此我强烈建议您使用UIImageViews来绘制图像。不要陷入优化陷阱:只有当您发现应用程序没有达到最佳性能时才会优化。
下载图片后,只需将imageView的图片属性设置为图片,即可完成。
答案 1 :(得分:0)
请注意,您链接到的stackoverflow页面已接近四年,该问题会链接到几乎五年岁的文章。当这些文章写于2008年时,目前的设备是iPhone 3G,速度要慢得多(CPU和GPU),并且RAM比2013年的当前设备少得多。所以你在那里阅读的建议今天不一定相关
无论如何,在你测量它之前不要担心性能(可能是使用Time Profiler仪器)并发现问题。只需以最简单,最易维护的方式实现您的界面。然后,如果您发现问题,请尝试更复杂的解决方法。
所以:只需使用UIImageView
显示图片,然后使用UILabel
显示文字。然后测试看它是否太慢。
如果您的测试显示速度太慢,请对其进行分析。如果您无法弄清楚如何对其进行概要分析,或如何解释探查器输出,或如何解决问题,那么请回过头来发布问题,并包括探查器输出。