2010-12-27 10 views
3

CALayerでクリッピングを無効にするにはどうすればよいですか?私はdrawInContextをオーバーライドしていますが、CALayerの範囲外に延びる線を描きたいので、これを実現するために親レイヤーで別の描画パスを実行したくありません。CALayerでクリッピングを無効にする

答えて

5

CALayerまたはUIViewの範囲外でQuartzを使用して描画することはできません。ノアが示唆するように、これを描くためには、レイヤーの境界を一定量だけ拡張する必要があります。

親レイヤのmasksToBoundsプロパティがNOに設定されている限り、親レイヤでいくつかの描画を行うことなく、これを行うことができます。そうすれば、たとえあなたのサブレイヤが親の端を越えて伸びていても、それは適切に描画されます。

+0

これはどのようなパフォーマンスが得られるか知っていますか? (もしあれば)。私は100と200のレイヤーを持っています、そしてこれは別の100から200レイヤーを追加します... – jjxtra

+0

@JJC - このアプローチはレイヤーを追加しません。既存のレイヤーの境界を拡張するだけです。より大きな領域を描画するのは時間がかかりますが、これは1回限りの操作である可能性があります。大きなレイヤーではより多くのメモリを使用しますが、ちょっとしたことを拡張したいように思えます。 –

+0

私は、レイヤーの中央に描画するように描画コードを変更してから、適切に描画する必要があります。私はこれがおそらく最高のソリューションだと思う、ありがとう! – jjxtra

3

まあ、CALayerは(、NOに設定し、層の境界にデフォルトのクリッピングを無効にします)masksToBounds性質を持っていますが、私はそれが層自体、ちょうどそのサブレイヤのクリッピングの描画に影響を与えないと思います。何らかの理由でレイヤー自体のフレームを展開できない場合は、レイヤーにそのプロパティを設定し、描画する寸法の大きなサブレイヤーを追加し、描画コードをそのサブレイヤーに移動する必要があります。

関連する問題