2010-08-17 94 views
2

我在圖層託管視圖中有一些CALayer。這些圖層中的每一層都有附加的圖層來保存(1)關閉按鈕,以及(2)調整大小手柄。這些附加的「控制」圖層作爲子圖層添加到父圖層。防止CALayer子圖層縮小

當前,當我縮放這些圖層所在的工作空間時,所有內容都會縮放 - 包括這些控制圖層。但是,我想阻止這些控制層的擴展。

是否有一種方法可以覆蓋應用於所有子圖層的縮放變換的行爲,而無需爲每個控制圖層重寫drawInContext:方法(假設這是可能的,則可能會顛倒任何現有的比例變換),並且而不必手動發送每個控制層一個setNeedsDisplay:每個縮放?

我發現這個線程討論做類似的事情,但討論的方向是CATiledLayers,這不是我在這裏尋找的。

Redrawing CALayer subclass when super layer is scaled

此外,這篇文章提出了一個有點相關的問題,但反應並不適用於我的情況,因爲我不能覆蓋的控制 - 他們必須在層體系中的一部分。

How do I keep a CALayer, sublayer of a CATiledLayer, from changing it's scale after a zoom?

+0

我最終解決了這個問題,方法是重寫自定義CALayers的layoutSublayers方法,獲取圖層層次結構的累積縮放比例變換,並將逆變換應用於控制子圖層。 – Dalmazio 2010-09-28 05:38:35

回答

3

我最終通過重寫我的自定義CALayers的layoutSublayers方法,獲得了層層次的累積尺度變換,並應用逆變換,以控制子層解決這個問題。

+0

您是否在視圖控制器的'scrollViewDidZoom:'委託方法中爲受影響的視圖調用了'[layer setNeedsLayout]'? – Benjohn 2014-11-21 18:21:54

+1

是的,沒有。該應用程序使用AppKit而不是UIKit。因爲這樣的UIScrollView和UIScrollViewDelegate不可用。但是如果你使用的是UIKit,你建議的方式是實現它的一種方法。 在這個應用程序中,一個單獨的圖層託管的視圖擁有一個內容圖層,該圖層依次保存許多子圖層。縮放/縮放變換直接應用於內容層,然後將'setNeedsLayout'發送到內容層中的所有項目層,以便子層控件可以設置其逆變換以保持固定大小。 – Dalmazio 2014-11-23 21:40:59