我將CALayer子類化爲在方法中提供我自己的繪圖。爲了優化,我呼籲-[MyLayer setNeedsDisplayInRect:]
而不是-[MyLayer setNeedsDisplay]
。在繪圖方法中,我得到應該通過CGContextGetClipBoundingBox()
重畫的矩形。- [CALayer setNeedsDisplayInRect:]導致整個圖層被重新繪製
如果我使用此層作爲基底層的UIView每件事情都按預期工作。問題出現了,只要我將自定義圖層用作其他CALayer的子圖層即可。比CGContextGetClipBoundingBox()
總是返回該層邊界的矩形。
任何想法?
[編輯]
看來,是沒有保證的,該CALayer的內容緩存,只有髒的部分被重新繪製。我做了一個小測試,並將需要顯示的矩形存儲爲一個單獨的屬性。結果是,只有這部分在屏幕上可見。
我現在將渲染到圖像上下文並將該圖像保存爲緩存。在繪製方法中,我只會顯示緩存的圖像。
非視圖圖層的「masksToBounds」屬性是否設置爲「YES」?如果不是,他們不會剪輯的充分理由。 – MrMage 2012-03-21 17:28:24
不幸的是,這並沒有解決它。問題是,'CGContextGetClipBoundingBox()'返回圖層的邊界,而不是Apple所記錄的需要更新的區域:*希望查找要繪製的實際區域的子類可以調用CGContextGetClipBoundingBox。* [drawInCOntext:] (https://developer.apple.com/library/ios/#documentation/GraphicsImaging/Reference/CALayer_class/Introduction/Introduction.html#//apple_ref/occ/instm/CALayer/drawInContext :) – 2012-03-22 09:56:18
你有沒有去過這個底部?我有同樣煩人的問題。 – mprivat 2012-05-08 21:55:09