2013-02-13 28 views
0

我有一個CALayer,我只爲可見區域提供內容(有點類似於CATiledLayer)。問題是,在CALayer的可見區域發生變化時,似乎沒有辦法接收通知,以便調用displayLayer。我目前子類化並掛接setPosition,setBounds和setTransform,但是這並不能捕獲超級視圖/圖層更改的情況(例如,UIScrollView通過更改滾動視圖原點來滾動)。我將代碼中的父視圖和setNeedsDisplay散佈在一起。CALayer的可視區域更改時的通知?

有沒有更好的方法?

回答

2

當前可見的矩形是[CALayer visibleRect]。這是由滾動視圖(圖層)設置的,並且是您期望在滾動視圖中繪製的內容。

您可能想要覆蓋-needsDisplayOnBoundsChange以返回YES。這通常是你如何處理你描述的大部分內容。

如果您希望像位置這樣的東西強制重繪(這很不尋常,但可行),那麼您可以覆蓋+needsDisplayForKey:以返回YES,以便對任何要強制重繪的關鍵更改進行返回。

如果您想確保只繪製需要繪製的圖形,則應在繪製代碼期間使用CGContextGetClipBoundingBox()檢查剪裁框。

+0

感謝您的回覆。 visbleRect是隻讀屬性,所以不提供通知。 needsDisplayOnBoundsChange只捕捉到我的圖層邊界,而不是包含我的圖層的視圖/圖層堆棧中的任何更改。同樣,setNeedsDisplayForKey只捕獲對我的圖層的更改(儘管它可能是一種比覆蓋方法更好的解決方案,正如我目前所做的那樣)。 CGContextGetClipBoundingBox()是沒用的,因爲我沒有CGContext。我直接使用未由CG渲染的圖像設置圖層內容。仍然沒有一般解決方案 – 2013-04-18 20:40:58