2011-09-15 66 views
5

想象一下在其父層(它是託管NSView的圖層的根層)左下角繪製的一個小紅色框(CALayer實例)。如何在調整父級NSView的同時將CALayer保持在同一位置?

當父視圖的框架更改時,紅框應保持在屏幕上的相同位置。我通過調整它相對於父視圖左下角的位置來做到這一點。

問題是,在某些情況下存在閃爍,我可以看到紅色框圖層在擴展框架的左下角被顯示在正確的位置之前。

我認爲將框架和位置更改包裝到一個CATransaction將使兩個更改一起,但這並不總是工作(文檔說,通過使用事務動畫將同時開始,但仍然似乎有時是一種競爭條件)。

如何調整父母NSView的框架,同時將子圖層保持在其可感知的位置?

實例和代碼:

NSView and box layer

我自己的想法:

  1. 隱藏紅框層,更新的位置,再次顯示

  2. 使用約束將其綁定到右側角落。問題是這個偏移量也可能發生變化,我將不得不更新可能導致閃爍問題的約束條件。

回答

0

嘗試刪除已將圖層與視圖一起移動的代碼,並將其放置在創建圖層的位置。

boxLayer.autoresizingMask = kCALayerMaxXMargin | kCALayerMinYMargin; 
相關問題