2011-05-10 21 views
0

绘制背景图片我想提请上有我用下面的代码设置背景图像的UIView:使用CGContextDrawImage

- (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(); 
} 

初始视图使用来自苹果的GLPaint示例中的代码创建的。对于我的生活,这个背景图像没有显示。我错过了什么?

谢谢!

回答

0

成功创建UIImage和imageRect。然后,您开始一个图像上下文来绘制图像,将图像绘制到上下文,并结束上下文。问题是你只是让上下文过期而不做任何事情。

在UIKit中,您不会向上推新的视觉效果,而是等到请求绘制。内部机制缓存你的图像,并使用它们移动的东西,并以通常的60fps重绘屏幕。

如果这是一个自定义的UIView子类,那么你可能想要保留UIImage并将它合成为你的drawRect:的一部分。您可以通过调用setNeedsRedraw将您的UIView的内容设置为已更改 - 您将被要求在将来的某个时刻重新绘制您的内容。

如果这不是一个自定义的子类,则最容易做的事情是包装在外鉴于这种观点,并添加一个UIImageView背后,对此可以设置UIImage的。

+0

感谢您的回复。我如何设置上下文?我尝试使用CGContextRestoreGState(currentContext);但没有任何改变。 – 2011-05-10 18:51:11

+0

将上下文设置为什么?上下文只是你画的东西;如果你想创建一个显示CGContext的视图,那么最简单的方法是将其转换为UIImage并使用UIImageView。但是你从一个UIImage开始,所以这有点傻。如果你想把它合并到你自定义的UIView子类中,那么你需要保留它,并在被问及时适当地合成它,通常在drawView:中。 – Tommy 2011-05-10 19:16:46

+0

我最终有两个单独的视图,父视图保存绘画视图,并根据需要将父视图的背景设置为图像。感谢您的建议。 – 2011-05-10 19:52:28

相关问题