2011-01-27 20 views
2

私は画面上にランダムに配置された一連のレイヤーを持っています。各レイヤーが追加されると、レイヤーはすべてのレイヤーの上に配置されます。CALayerが他のCALayersによって完全にカバーされているかどうかを確認するにはどうすればよいですか?

最終的に、レイヤーは他のレイヤーで完全に覆われています。この時点で、私はメモリからレイヤーを削除したいと思います。

レイヤーが他のレイヤーで覆われているかどうかを知る方法はありますか(100%または一部)?

各レイヤーに回転変換が適用されているため、すべてのレイヤーフレームを正確に比較することはできません。

答えて

3

ピクセルテストを実行して調べることができます。 iOSが実際にその設定をサポートしているかどうかわかりませんが、可能であればグレースケールのコンテキストを初期化してください(可能であれば、1ビットにする必要があります)。黒で塗りつぶす。レイヤーが白く覆っている領域を塗りつぶします(レイヤーの変換を行い、CTMとして設定し、レイヤーの四角形を塗りつぶすことができます)。次に、他のすべてのレイヤーを繰り返し処理し、同じことを行います。これが完了すると、コンテキスト内のすべてのピクセルをスキャンして、それらのどれかが白であるかどうかを調べることができます。白いピクセルが見つかると、そのレイヤーは引き続き表示されます。そうでなければ、そうではありません。

もちろん、これはすべてのレイヤーが完全に不透明であり、境界全体を埋めると仮定しています。

+0

ありがとうKevin - 私はあなたの答えの行に沿って何かを実装し始めましたが、計算がちょっと高価(遅い)になったことがわかりました。ありがとう。 – TomH

+0

定期的に行うことができます。 10の新しいレイヤーごとに、パスしてください。 8ビットグレースケールのコンテキストを使用すると、より多くの情報をエンコードすることができます。ボトムアップから始めて、新しいレイヤーを少し白い値で描画します。この方法で、一度に下から複数のレイヤーをトリミングすることができます。 –

+0

ああ - 非常にクールです。私はそれをもう一度見てみましょう。ありがとう。 – TomH

関連する問題