2015-11-27 86 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) 

這解決了這個問題。

相關問題