我有一个自定义UIImageView类,可以创建缩略图(UIImageView),每个缩略图都有一个标签。
标签由另一个类创建。标签类在它上面创建一个UIImageView和一个UITextView。
这是主缩略图类'init方法:
- (id)initWithFrame:(CGRect)frame
{
if ([super initWithFrame:frame] == nil) {
return nil;
}
CGRect myFrame = CGRectMake(0, 0, 100, 100);
myLabel = [[myLabelClass alloc] initWithFrame: myFrame]; //myLabelClass is a UIImageView based class
[myLabel setCenter:CGPointMake(50, 50)];
[self addSubview: myLabel];
return self;
}
标签类只创建一个UIImageView和一个UITextView并在其上放置文本。
所以,我有这个
MAIN VIEW CONTROLLER |
|___ UIImageView WITH LABEL
|
|____ label background (UIView)
|____ UITEXTVIEW (text)
现在我想将所有这3个组件的内容写入石英上下文。
我需要使用drawInRect编写,因为我需要将完整的对象写入精确的位置。
我希望 object.layer.contents 成为相当于这三个“图层”展平的图像,换句话说就是对象的图像,标签背景和标签文本,就像它会我在Photoshop中创建了这3个对象并展平了合成。
我还希望 thumbnail.myLabel.layer.contents 包含标签背景上UITextView的渲染内容。
问题是当我使用
时UIImage *myImage = [UIImage imageWithCGImage:thumbnail.myLabel.layer.contents];
[myImage drawInRect:CGRectMake(0, 0, 100, 100)];
我一无所获。
如何获得整个对象(包括其子视图)的“平坦”图像?
感谢
答案 0 :(得分:2)
CALayer内容仅在您设置时有效。尝试使用UIGraphicsBeginImageContext
创建上下文并使用CALayer renderInContext
创建图像。我使用这样的东西作为UIView的一个类别:
-(UIImage *) asImage {
UIImage *result = nil;
UIGraphicsBeginImageContext( [self bounds].size );
[[self layer] renderInContext:UIGraphicsGetCurrentContext()];
result = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return result;
}