开发者

Draw background image using CGContextDrawImage

I want to draw on a UIView that has a background image that I set using the code below:

- (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, imageRec开发者_如何学运维t, image.CGImage);

    UIGraphicsEndImageContext();
}

The initial view is created using the code from Apple's GLPaint example. For the life of me, that background image is not shown. What am I missing?

Thanks!


You create a UIImage, and an imageRect successfully. You then begin a image context to draw the image to, draw the image to the context, and end the context. The problem is that you just allow the context to expire without doing anything to it.

In UIKit you don't push new visuals upwards, you wait until requested to draw. Internal mechanisms cache your images and use them to move things about and otherwise redraw the screen at the usual 60fps.

If this is a custom UIView subclass, then you probably want to keep hold of the UIImage and composite it as part of your drawRect:. You can set the contents of your UIView as having changed by calling setNeedsRedraw — you'll then be asked to redraw your contents at some point in the future.

If this isn't a custom subclass, then the easiest thing to do is to wrap this view in an outer view and add a UIImageView behind it, to which you can set the UIImage.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜