抓取类中的图层内容

时间:2010-04-25 04:01:36

标签: javascript iphone iphone-sdk-3.0

我有一个自定义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)];

我一无所获。

如何获得整个对象(包括其子视图)的“平坦”图像?

感谢

1 个答案:

答案 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;
}