2012-06-15 29 views
3

我正在嘗試創建一個UIViewCALayer子圖層。使用此代碼UIGraphicsGetImageFromCurrentImageContext與CALayers

- (UIImage*)snapshot{ 
    UIGraphicsBeginImageContext(self.bounds.size); 
    [self.layer renderInContext:UIGraphicsGetCurrentContext()]; 
    UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    return viewImage; 
} 

我得到一個圖像,但它不能準確代表屏幕上顯示的內容。特別是,它不尊重CAShapeLayer掩碼屬性。我的圓角不出現在圖像中。

下面是一個例子的屏幕上的顯示它是如何出現在圖像中的比較: enter image description here

只是爲了澄清,右側的圖像被放置在相同的位置與舊對象,基本上柵格化對象。這就是爲什麼有相同的背景;它不是我捕捉圖像的對象的一部分。

如何在保留圖像中的CAShapeLayer遮罩的同時捕捉對象的圖像?

編輯:它似乎是圖層蒙版是問題,而不是路徑。

回答

1

而不是使用self.bounds.sizeself.layer,只需使用其角落圓角的視圖。 假設如果是imageView然後

- (UIImage*)snapshot 
{ 
    UIGraphicsBeginImageContext(imageview.size); 
    [imageview.layer renderInContext:UIGraphicsGetCurrentContext()]; 
    UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    return viewImage; 
} 
+0

視圖包含許多子類UIButtons作爲子視圖。這些UIButton子類對象包含多個CAShapelayers作爲子層。這些CAShapeLayers包含圓角。我怎樣才能做到這一點,而不需要將每個CALayer作爲單獨的圖像進行捕獲? – jadengeller

+0

這真的沒有回答這個問題。 – jadengeller

1

直從CALayer的類參考:

此外,該...指定backgroundFilters,過濾器,compositingFilter或掩模值層...沒有渲染。

我正在使用掩膜,而不是CGPath。 (嗯,具有路徑的CALayer是我的面具,但仍。)

另一個問題,但是,我不能切換到使用路徑,而不是一個面具,因爲我使用的梯度和CAGradientLayer不具有路徑財產如CAShapeLayer,這就是爲什麼我使用了面具。