我的應用程序允許用戶前後切換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