2010-01-06 3 views
3

У меня есть подкласс UIView - фактически кусок головоломки - с двумя разными CGLayer, инициализированными в initWithFrame.Установить «непрозрачность» CGLayer перед розыгрышем?

В DrawRect я должен смеси этого слоя два, а самый верхний должен иметь переменную альфа в зависимости от игровой логики.

Каков наилучший способ (наиболее оптимизированный для производительности)? Есть ли функция CGLayer или CGContext, которая устанавливает альфа перед рисованием?

ответ

6

Установите слой -opacity. Помните, что настройка уровня -opaque слоя должна быть НЕТ. По умолчанию выбрано значение НЕТ, но по соображениям производительности обычно установлено значение ДА.

Если вы уже делаете -drawInContext:, вы можете поэкспериментировать с CGContextSetAlpha(). Как правило, вы не используете -drawRect: и слои одновременно. Вы обычно разрешаете либо представление, либо слои рисунка.

+0

Вы имеете в виду, что я должен создать независимый, например. - (void) метод renderView и реализовать там чертежи слоев? Тогда [puzzlePiece setNeedDisplay] можно заменить простым [puzzlePiece renderView]? – Geri

+0

Это звучит правильно, если вам нужно каждый раз отображать все части изображения. В противном случае я просто переделаю слои, которые вам нужны, когда ваш модельный класс (данные) изменится. Нет причин перерисовывать слой только потому, что нужно перерисовать другой слой. –

+0

Курс. Пазлы на самом деле выделяются/addSubview-ed экземпляров класса PuzzlePiece: UIView, поэтому только обработанная пользователем часть получает сообщение перерисовывания (renderView above «означает« renderPuzzleView »). – Geri

Смежные вопросы