据我所知,iOS7的新
drawViewHierarchyInRect应该比CALayer的
renderInContext更快.根据
this和
this,它应该是一个简单的调用问题:
[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 – 您可能会获得在您创建的图像上下文边界之外呈现的视图图像.