2011-09-15 9 views
5

親レイヤの左下隅にある小さな赤いボックス(CALayerインスタンス)(NSViewをホストするレイヤのルートレイヤ)を想像してみてください。親NSViewのサイズを変更しながらCALayerを同じ位置に保つには?

親ビューのフレームが変更されると、赤いボックスは画面上の同じ位置に留まります。これを行うには、親ビューの左下隅に相対的な位置を調整します。

問題は、ちらつきがあり、正しい位置に表示される前に、拡張フレームの左下隅に赤いボックスレイヤーが描画されていることがわかります。

フレームと位置の変更を1つのCATransactionにラップすると、両方の変更が同時に行われることになりますが、それは必ずしも機能しません(ドキュメントでは、時には競合状態と思われる)。

子レイヤーを知覚した位置に保ちながら、親フレームのフレームを調整するにはどうすればよいですか?NSView

例およびコード:

NSView and box layer

私自身のアイデア:

  1. 隠す赤いボックス層、位置を更新し、再び

  2. を使用し、それを表示します制約を右隅にバインドします。問題は、このオフセットが変更される可能性があり、同じちらつきの問題につながる制約を更新する必要があるということです。

答えて

0

レイヤーをビューで移動し、レイヤーを作成する場所に配置したコードを削除してみてください。

boxLayer.autoresizingMask = kCALayerMaxXMargin | kCALayerMinYMargin; 
関連する問題