2015-11-27 40 views
1

我的应用程序允许用户前后切换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捕捉屏幕截图时。他们不是。

+0

“结果错误”是什么意思?你在尝试什么z位置值? – trojanfoe

+0

我交换了UIImageView的z位置。它在手机屏幕上看起来是正确的,但当我尝试捕获它时没有看到。 –

+0

我并不完全明白你的代码在做什么。你为什么没有在你的问题中展示它? – trojanfoe

回答

0

我也有这个问题。在使用renderInContext()之后,我希望文本在图像顶部绘制。我通过将视图添加到窗口而不是使用图层来设置z位置来解决这个问题。

我曾经有将向上设置其z位置的文本字段:

layer?.zPosition = 1 

我删除此代码,而是将我的形象的窗口时,我用:

addSubview(image, positioned: .Below, relativeTo: nil) 

这解决了这个问题。

相关问题