4

我正在尝试在两个 ViewController 之间进行转换。我的 Transition 类有一个用于目标视图控制器的属性。当我尝试获取目的地视图的屏幕截图时,我使用以下方法:

+ (UIImage *)renderImageFromView:(UIView *)view withRect:(CGRect)frame {
    // Create a new context the size of the frame
    UIGraphicsBeginImageContextWithOptions(frame.size, YES, 0);
    CGContextRef context = UIGraphicsGetCurrentContext();

    // Render the view 
    [view.layer renderInContext:context];

    // Get the image from the context
    UIImage *renderedImage = UIGraphicsGetImageFromCurrentImageContext();

    // Cleanup the context you created
    UIGraphicsEndImageContext();

    return renderedImage;
}

所以当我想要图像时,我会这样做:

UIImage *image = [UIImage renderImageFromView:destinationController.view withRect:destinationController.view.bounds];

我在带有橙色背景颜色和标签的空白 UIViewController 上进行了尝试。我得到橙色背景颜色,但没有得到在 IB 中创建的标签。有没有办法获得我计划显示的新视图的正确屏幕截图?谢谢!

4

1 回答 1

1

您需要确保首先绘制视图的图层。在 a 上调​​用 renderInContextCALayer只会递归调用额外CALayer的 child 。您需要您的孩子UIView自己绘制,而不仅仅是使用CALayer.

试着打电话

[view drawrect:frame]; 

代替

[view.layer renderInContext:context];

只要你有一个开放的图形上下文(你当时做的),就drawrect应该直接画进去。

于 2012-12-20T20:33:22.780 回答