我想在UIView上绘制一个背景图像,我使用下面的代码设置:
- (void)setBackgroundImageFromData:(NSData *)imageData {
UIImage *image = [UIImage imageWithData:imageData];
int width = image.size.width;
int height = image.size.height;
CGSize size = CGSizeMake(width, height);
CGRect imageRect = CGRectMake(0, 0, width, height);
UIGraphicsBeginImageContext(size);
CGContextRef currentContext = UIGraphicsGetCurrentContext();
CGContextTranslateCTM(currentContext, 0, height);
CGContextScaleCTM(currentContext, 1.0, -1.0);
CGContextDrawImage(currentContext, imageRect, image.CGImage);
UIGraphicsEndImageContext();
}
使用Apple的GLPaint示例中的代码创建初始视图。对于我的生活,没有显示该背景图像。我错过了什么?
谢谢!
答案 0 :(得分:0)
您可以成功创建UIImage和imageRect。然后,您开始一个图像上下文来绘制图像,将图像绘制到上下文,并结束上下文。问题是你只是允许上下文过期而不做任何事情。
在UIKit中,你不会向上推新视觉效果,等到被要求画画。内部机制缓存您的图像并使用它们移动内容,否则以通常的60fps重绘屏幕。
如果这是一个自定义的UIView子类,那么你可能想要保留UIImage并将其合成为drawRect:
的一部分。您可以通过调用setNeedsRedraw
将UIView的内容设置为已更改 - 然后将要求您在将来的某个时刻重新绘制内容。
如果这不是自定义子类,那么最简单的方法是将此视图包装在外部视图中并在其后面添加一个UIImageView,您可以在其中设置UIImage。