2011-03-28 24 views
9

我想將CALayer的內容設置爲圖像。 CALayer有一個contents屬性該屬性的文檔說,「圖層可以將此屬性設置爲CGImageRef以將圖像顯示爲其內容。」但屬性取id所以在Xcode中,我得到了以下問題:如何將CALayer的內容設置爲CGImageRef?

語義問題:不兼容的指針 類型從 「CGImageRef」(又名「結構CGImage *」)

分配給「ID」

如何將CGImageRef分配給contents屬性,只需要id?我在這裏錯過了什麼?

回答

5

明確鑄造CGImageRefid應該修復警告。例如,

CGImageRef imageRef; 

... 

layer.contents = (id) imageRef; 

應該工作正常。

+4

賓果。但我不完全明白爲什麼。 'CGImageRef'不是'NSObject',因此不能被表示爲'id' ...對嗎?這個演員中究竟發生了什麼? – 2011-03-28 06:52:36

+0

@SimonCave在'運行時不需要任何費用。實際上,編譯後的二進制文件甚至可以在使用或不使用轉換時看起來相同關鍵是文檔告訴我們我們可以將'CGImageRef'設置爲'contents',所以我們只是盲目地相信它。如果根據文檔的內容是內容的唯一有效類型,那麼內部實現可能實際上只是將其轉換回'CGImageRef'。 – tia 2012-04-27 03:04:20

12

您可以使用(__bridge id)來解決類型轉換問題,而不是使用(id)。

+0

+1傑裏。我發現一個簡單的(id)演員沒有工作,但你的建議。是因爲我使用C++ 11嗎? – MickyD 2012-06-14 02:49:05

+0

+1提及ARC修飾符。這是ARC所要求的。 – Eonil 2012-09-09 17:58:48

相關問題