Изо всех сил пытается очистить ВСЕ ДАННЫЕ от CGLayer - это может быть даже сделано? - PullRequest
3 голосов
/ 04 января 2011

Мы периодически создаем CGLayer, выполняем обработку, а затем выпускаем ее. Это часто происходит в режиме реального времени. Конечно, каждый раз при создании нового CGLayer нужно много усилий. Итак ...

Конечно, было бы лучше просто сохранить слой вокруг и каждый раз стирать все данные с него , а не создавать новый с нуля.

Примечание: если вы рисуете пустой или прозрачный прямоугольник, охватывающий все, , который просто добавляет еще больше данных поверх ваших существующих путей.

Итак, как на самом деле «стереть» или «начать заново» CGLayer?

Существует функция CGContextBeginPath (cc), но она сбивает с толку: кажется, она только очищает "этот" путь, кажется, что она не стирает весь CGLayer обратно в состояние отсутствия данных .

Как вернуть CGLayer в состояние отсутствия данных? Кто-нибудь знает?

Обновление ...

Оказывается, на самом деле нет способа сделать это.

После значительных экспериментов мы определили, что, похоже, нет никакого способа очистить все данные от CGLayer (что действительно разочаровывает).

Обратите внимание, что добавление нового белого или прозрачного прямоугольника только делает это - фактически добавляет больше данных.

Так что, к сожалению, нет известного способа сделать это. Если вы строите их с высокой частотой (возможно, для расчета), вам просто нужно начинать с новой каждый раз. Или, очевидно, вы можете удалить (на самом деле удалить, а не просто закрыть) только один путь, используя CGContextBeginPath ().

Надеюсь, это поможет кому-то в будущем.

Ответы [ 2 ]

2 голосов
/ 05 января 2011

Если у вас есть контекст, вызовите CGContextClearRect (cc, someRect), чтобы очистить содержимое.

1 голос
/ 05 января 2011

Почему бы вам просто не заполнить его прямоугольником (прозрачного / белого) цвета? Убедитесь, что слой не является непрозрачным, если вы хотите очистить его с помощью clearColor (прозрачный).

...