2010-01-09 80 views
2

在我的應用程序中,我有一個根層和許多圖像,它們是rootLayer的子圖層。我想將rootLayer的所有子層平鋪到一個圖層/圖像中,沒有任何子圖層。我想我應該通過繪製核心圖形環境中的所有子圖層來做到這一點,但我不知道該怎麼做。將CALayer子圖層平鋪到一個圖層中

我希望你能理解我,併爲我的英語感到抱歉。

回答

9

從你自己的例子爲Mac OS X:

CGContextRef myBitmapContext = MyCreateBitmapContext(800,600); 
[rootLayer renderInContext:myBitmapContext]; 
CGImageRef myImage = CGBitmapContextCreateImage(myBitmapContext); 
rootLayer.contents = (id) myImage; 
rootLayer.sublayers = nil; 
CGImageRelease(myImage); 

的iOS:

UIGraphicsBeginImageContextWithOptions(rootLayer.bounds.size, NO, 0.0); 
[rootLayer renderInContext: UIGraphicsGetCurrentContext()]; 
UIImage *layerImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
rootLayer.contents = (id) layerImage.CGImage; 
rootLayer.sublayers = nil; 

還要注意在文檔中警告:

Mac OS X的V10.5實施 此方法不支持 整個核心動畫組合 模式湖QCCompositionLayer, CAOpenGLLayer和QTMovieLayer圖層 未呈現。此外,使用3D變換的圖層 不是 呈現,也不是指定 backgroundFilters,過濾器, compositingFilter或掩碼值的圖層。

+0

謝謝!雖然這是過濾器的恥辱,並且不支持3d變換。 – radex

+0

不適用於子層,如果它們被轉換! – gwdp

+0

不起作用;返回的圖像是空白的(全白)。 –

1

您是否仍然希望該圖層具有交互性?如果沒有,請撥打-renderInContext:並顯示位圖上下文。

+0

正如我所說我不知道​​如何做到這一點。 我寫道:http://en.pastebin.ca/1744529 但它不起作用。 – radex

相關問題