Изо всех сил пытается очистить ВСЕ ДАННЫЕ от CGLayer - это может быть даже сделано?
Мы периодически делаем CGLayer, выполняем обработку, а затем выпускаем ее. Это часто происходит в режиме реального времени. Конечно, каждый раз при создании нового CGLayer нужно много усилий. Так...
Конечно, было бы лучше просто держать слой вокруг и каждый раз стирать все данные с него, а не создавать новый с нуля.
Примечание: если вы рисуете пустой или прозрачный прямоугольник, охватывающий все, это просто добавляет еще больше данных поверх ваших существующих путей.
Итак, как на самом деле "стереть" или "начать заново" CGLayer?
Есть функция CGContextBeginPath(cc), но она сбивает с толку: кажется, что она только очищает "этот" путь, она, кажется, не стирает весь CGLayer обратно в состояние отсутствия данных.
Как вернуть CGLayer в состояние отсутствия данных? Кто-нибудь знает?
Обновить...
Оказывается, на самом деле нет никакого способа сделать это.
После значительных экспериментов мы определили, что, похоже, нет никакого способа очистить все данные от CGLayer (что действительно разочаровывает).
Обратите внимание, что добавление нового белого или прозрачного прямоугольника только делает это - фактически добавляет больше данных.
Так что, к сожалению, нет известного способа сделать это. Если вы строите их на высокой частоте (возможно, для расчета), вам просто нужно начинать с новой каждый раз. Или, по-видимому, вы можете удалить (на самом деле удалить, а не просто закрыть) только один путь, используя CGContextBeginPath().
Надеюсь, это поможет кому-то в будущем.
2 ответа
Когда у вас есть контекст, вызовите CGContextClearRect( cc, someRect), чтобы очистить содержимое.
Почему бы вам просто не заполнить его прямоугольником (прозрачного / белого) цвета? Убедитесь, что слой не является непрозрачным, если вы хотите очистить его с помощью clearColor (прозрачный).