ipad – iOS7的drawViewHierarchyInRect不起作用?

据我所知,iOS7的新 drawViewHierarchyInRect应该比CALayer的 renderInContext更快.根据 thisthis,它应该是一个简单的调用问题:

[myView drawViewHierarchyInRect:myView.frame afterScreenUpdates:YES];

代替

[myView.layer renderInContext:UIGraphicsGetCurrentContext()];

但是,当我尝试这个时,我只是得到空白的图像.执行捕获的完整代码,其中“self”是UIView的子类,

// YES = opaque. Ignores alpha channel,so less memory is used.
        // This method for some reasons renders the
    UIGraphicsBeginImageContextWithOptions(self.bounds.size,YES,self.window.screen.scale);    // Still slow.

    if ( [aimAppDelegate isOniOS7OrNewer] )
        [self drawViewHierarchyInRect:self.frame afterScreenUpdates:YES]; // Doesn't work!
    else
        [self.layer renderInContext:UIGraphicsGetCurrentContext()];     // Works!

    UIImage *image = UIGraphicsGetimageFromCurrentimageContext();
    UIGraphicsEndImageContext();

    contentimageView.image = image; // this is empty if done using iOS7's way

和contentimageView是一个UIImageView,在初始化期间作为子视图添加到self.

此外,我想要在图像中捕获的图形包含在其他子视图中,这些子视图在初始化期间也作为子视图添加到self(包括contentimageView).

使用drawViewHierarchyInRect时为什么会失败的任何想法?

*更新*

如果我绘制特定的子视图,我会得到一个图像,例如:

[contentimageView drawViewHierarchyInRect:contentimageView.frame afterScreenUpdates:YES];

要么

[self.curvesView drawViewHierarchyInRect:self.curvesView.frame afterScreenUpdates:YES];

但是我需要将所有可见的子视图合并为一个图像.

解决方法

尝试使用self.bounds而不是self.frame – 您可能会获得在您创建的图像上下文边界之外呈现的视图图像.

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...