web-dev-qa-db-ja.com

CGLayerとCALayerの違いと互換性は何ですか?

CGLayerCALayerを混同しています。それらは似ているように見えますが、なぜ別々の実装があるのですか? CGLayerCALayerの違いと互換性は何ですか?

53
Eonil

それらは完全に異なり、互換性がありません。

完全に明確にするために:

厳密には偶然単語「レイヤー」が両方で使用されている名前;それらは完全に無関係です。

CGLayersは「特別な」「高性能」なものです。

それらは「ビットマップのようですが、より優れている」と考えることができます。

Appleは腰を下ろし、「ビットマップを使用する人々にうんざりしている。何かをもっと良くしよう!」と言った。 :-)

実際、CGLayers offscreenでのみ作業します。

繰り返しますが、CGLayersは完全にオフスクリーンで使用されます。

準備ができたら、実際の画面にブラストすることができます(つまり、ビューの1つにブラストします)。

ただし:注:CGLayersは「単独で」使用されることがよくあります。「単独で」使用されるとは、画像処理または数学計算に使用されることを意味します。その場合、CGLayersは画面上で見たことはなく、画面上の世界とはまったく関係がありません。)

対照的に...CALayersは単にビューの「中にある」ものです。CALayersはビューの動作方法です。

したがって、2つの概念は完全に異なります。

CALayersは、ビューの「中にある」ものにすぎません。 対照的に、CGLayersはAppleのクールな「オフスクリーン、高性能、計算機構」です。

明確にするために、CGLayersにはビューとの接続がまったくなく、ビューとの関連付けもありません。 (もちろん、CGLayerをビューに貼り付けることはできますが、「タイポグラフィ」または「画像」などをビューに貼り付けることができます。タイポグラフィと画像はビューではなく、CGLayersはビューではありません。)

典型的な例はこれです:

複雑なものを一度描いてから、それを何度も画面に描きたいと思います。その問題への答えはまさにCGLayersです。 「作業領域」はCGLayerになります。次に、それをプリンターや画面などにブリットすることができます。

明確にするために、私の意見ではAppleは別の名前を選択する必要がありました.。

適切な名前は「CGCalculationSpace」です。

名前に「レイヤー」という言葉が含まれているという事実は、NSLayersを思い起こさせます。

繰り返しになりますが、いかなる関係もまったくありません。 CGLayersは、漠然とレイヤーに関連していません。

接続はまったくありません。名前に「la y e r」という文字が使われているのは本当に紛らわしいですが、それは残念です!

CGLayersは、おそらく「ワークスペース」または「計算パラダイム」などと呼ばれる必要があります。

それがお役に立てば幸いです、そしてあなたがまだ読んでいることを願っています!

124
Fattie