我的应用程序允许用户前后切换UIImageView
,然后用户可以捕捉该屏幕。这里是我的代码来捕捉屏幕为黑色绘制的截图UIImage
当更改图层Z位置时,renderInContext无法正常工作
-(UIImage *)imageWithView:(UIView *)view
{
UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.opaque, 2.0f);
// I even tried view.layer.presentationLayer but still not working
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
我不使用[view drawViewHierarchyInRect:view.bounds afterScreenUpdates:YES]
,因为它是速度较慢,有时(当视图不可见)。
但renderInContext的问题是在UIImageView (imageView.layer.zPosition = 0.01;etc)
之间变化的Z位置。在我的iPhone屏幕中,当我将值赋给zPosition但是在捕获屏幕中结果错误时,此功能正常工作。
有无论如何我可以解决这个问题?在此先感谢
编辑: 这是我在捕获屏幕截图之前试图做的。我使用此代码在另一个ImageView前面显示一个ImageView。
-(void)bringOneLevelUp:(UIImageView*)imageView
{
//_imgArray is sorted by Z position order (small to big)
NSUInteger currentObjectIndex = [_imgArray indexOfObject:imageView];
if(currentObjectIndex+1< _imgArray.count){
UIImageView *upperImageView = [_imgArray objectAtIndex:currentObjectIndex+1];
CGFloat currentZIndex = imageView.layer.zPosition;
CGFloat upperZIndex= upperImageView.layer.zPosition;
imageView.layer.zPosition = upperZIndex;
upperImageView.layer.zPosition = currentZIndex;
// swap position in array
[_imgArray exchangeObjectAtIndex:currentObjectIndex withObjectAtIndex:currentObjectIndex+1];
}
}
,喜欢我解释这个代码在手机屏幕的前面的结果是正确的。 newImageView位于lastImageView的前面。但是当我通过renderInContext捕捉屏幕截图时。他们不是。
“结果错误”是什么意思?你在尝试什么z位置值? – trojanfoe
我交换了UIImageView的z位置。它在手机屏幕上看起来是正确的,但当我尝试捕获它时没有看到。 –
我并不完全明白你的代码在做什么。你为什么没有在你的问题中展示它? – trojanfoe