2009-08-15 25 views
3

我可以使用下面的代碼核心動畫層創建一個UIImage:CAShaperLayer -renderInContext不起作用?

- (UIImage*)contentsImage; 
{ 
    UIGraphicsBeginImageContext([self bounds].size); 
    [self renderInContext:UIGraphicsGetCurrentContext()]; 
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    return image; 
} 

此代碼是在我的CALayer的派生類。我遇到的問題是,我有兩個CAShapeLayers,它們是我的圖層的子圖層,不會呈現給結果圖像。如果我添加標準CALayers作爲孩子,他們會得到罰款。 Apple文檔說:

將接收器及其子層 渲染到指定的上下文中。

它也說它自iPhone OS 2.0以來一直可用。想知道是否有我丟失的東西,或者我是否應該提交雷達。

有什麼想法可以讓孩子CAShapeLayers不被繪製到圖像?

謝謝。

回答

4

CALayer機器調用renderInContext來創建其位圖內容屬性。但在CAShapeLayer,路徑屬性不實際提供給它的內容作爲標題看到的這樣一個字條:

形狀作爲一個整體複合層的內容和它的 第一子層之間 。

這意味着renderInContext實際上不會將CAShapeLayer路徑渲染到您的上下文中。然而,我並沒有爲我自己嘗試過。

+0

有趣。不知道蘋果會在我提交的雷達上回來 - 如果這是預期的行爲。我不確定它甚至意味着它在內容和第一個子圖層之間的合成。怎麼樣?我想這會解釋它。如果我正在閱讀正確的內容,似乎並不是內容的一部分。 – 2009-09-09 15:23:13

+0

更新了嗎? – gwdp 2012-03-02 07:37:00

0

不知道如果與你有關的,但有一個注意的CALayer文檔renderInContext,說在:

**Important**: The Mac OS X v10.5 implementation of this method does not 
support the entire Core Animation composition model. QCCompositionLayer, 
CAOpenGLLayer, and QTMovieLayer layers are not rendered. Additionally, 
layers that use 3D transforms are not rendered, nor are layers that specify 
backgroundFilters, filters, compositingFilter, or a mask values. 
Future versions of Mac OS X may add support for rendering these layers 
and properties.

不管怎麼說,我使用結合了UIView的drawRect功能時遇到了類似的問題在圖像上下文中繪製。包含子視圖的整個UIView不會繪製其子視圖,如果我調用drawRect(現在它實際上是有意義的,因爲它在文檔中說如果您調用drawRect,您負責填充整個區域而不管超級和子視圖實現)。我通過在我所有的子視圖上調用drawRect來解決我的問題,並將它們傳遞給它們自己的框架。

所以我建議也許切換離開renderInContext並使用CALayer的drawInContext來代替?您需要重寫該方法,因爲它默認情況下不會執行任何操作。你的子類也需要將上下文移動到合適的幀。爲了安全起見,您可能需要檢查您添加的代碼是否影響這些圖層的正常渲染。

+0

這很奇怪,因爲我沒有使用該通知中指定的任何字段。問題是我想將圖層渲染爲圖像,然後重新使用圖像,因爲與圖層相比,將圖層添加到圖層樹會導致性能明顯下降。我在表格單元格中使用它,所以我需要使它更加高效,但是我希望隨時繪製圖像,讓圖形藝術家在每次需要新皮膚時都創建一個新圖像,這是不可取的。我想還有其他非CA方法可以做到這一點。感謝您的反饋。 – 2009-08-17 14:45:54

0

我對此提出了一個雷達。在文檔中,我看不到任何原因,它不應該起作用。如果/當蘋果回覆雷達時我會回覆。

+0

我發現除了形狀本身以外,沒有任何東西可以呈現。我認爲這就是它的設計方式,但文檔很薄弱。在附註中,您可能會發現這一點很有趣:http://tumbljack.com/post/179975074/complex-interpolation-with-cashapelayer-free – 2009-09-05 17:38:02

+0

您是否曾收到Apple的回覆? – haroldcampbell 2011-04-18 18:45:19