В чем разница и совместимость CGLayer и CALayer? - PullRequest
51 голосов
/ 16 декабря 2010

Я путаю CGLayer и CALayer.Они выглядят одинаково, так почему существуют отдельные реализации?В чем разница и совместимость между CGLayer и CALayer?

1 Ответ

123 голосов
/ 04 января 2011

Они совершенно разные и несовместимые.

Чтобы быть абсолютно ясным:

это строго совпадение , что слово "слой" используется в обоих имена ;они совершенно не связаны .

CGLayers - это «особые» «высокопроизводительные» штуки.

Вы можете считать их «как растровые изображения, но лучше».

Apple села и сказала: "Нам надоели люди, использующие растровые изображения, давайте сделаем что-то лучше!": -)

Действительно, вы работаете только с CGLayers offscreen .

Повторюсь, CGLayers полностью используются вне экрана.

Как только они будут готовы, вы можете затем вставить их на свой фактический экран (то есть: развернуть их на один из ваших видов).

( Однако : обратите внимание, что:CGLayers часто используются «в одиночку». Когда я говорю, что они используются «в одиночку», я имею в виду, что они используются для обработки изображений или математических вычислений. В этом случае CGLayers никогда не видны на экране, и они совершенно не связаны с экраном.world.)

В отличие от ... CALayers - это просто вещи "в" взглядах.CALayers - это просто то, как работают представления.

Таким образом, эти два понятия полностью различаются.

CALayers - это просто "в" представлениях. В отличие от CGLayers - это крутая «внеэкранная, высокопроизводительная, вычислительная техника Apple».

Чтобы быть понятным, CGLayers совершенно не связаны с представлениями и не связаны сПросмотры.(Конечно, вы можете вставить CGLayer в представление, но затем вы можете вставить, скажем, «типографика» или «изображение» в представление. Типография и изображения не являются представлениями, а CGLayers не являются представлениями.)

Типичный пример таков:

вы хотите один раз нарисовать что-нибудь сложное, а затем много раз нарисовать это на экране.Ответом на эту проблему является именно CGLayers.Ваша «рабочая зона» будет CGLayer;затем вы можете перетащить его на принтер, на экран или что-то еще.

Чтобы было ясно, по моему мнению, Apple должна была выбрать другое имя ...

хорошее имя будет "CGCalculationSpace".

Тот факт, что имя содержит слово "layer", заставляет вас думать о NSLayers.

Повторим: нет абсолютно никакой связиникак, никак.CGLayers даже слабо связаны со слоями.

Нет никакой связи вообще.Это действительно сбивает с толку, что в имени используются буквы «layer» - это позор !!

CGLayers следует называть, возможно, «рабочими пространствами» или «парадигмами вычисления» или чем-то в этом роде.

Надеюсь, это поможет и надеюсь, что вы все еще читаете!

...