Лучший способ ускорить многократное использование "CGContextDrawRadialGradient" в Drawrect?
Я не смог опубликовать изображение, но я использую метод "CGContextDrawRadialGradient", чтобы нарисовать затененный синий шар (~40 пикселей в диаметре), его тень и сделать "пульсирующее" белое кольцо вокруг шара (внутренний и внешний градиенты на кольцо). Кольцо начинается по краям синего шара и расширяется наружу (радиус увеличивается с таймером). Белое кольцо исчезает, расширяясь наружу, как радиоволна.
Отлично смотрится в симуляторе, но на iPhone 4 работает очень медленно. Звонок должен пульсировать примерно секунду (как в симуляторе), но на телефоне это занимает 15-20 секунд. Я немного читал о CALayer, CGLayer и читал некоторые сегменты на некоторой градиентной анимации, но не ясно, что я должен использовать для лучшей производительности.
Как я могу ускорить это. Должен ли я положить мяч на слой, а расширяющее кольцо на другой слой? Если да, то как мне узнать, какой слой нужно обновить на чертеже?
Ценю любое руководство. Благодарю.
1 ответ
Единственный способ ускорить что-то подобное - это предварительно отрендерить. Определите, сколько кадров изображений вам нужно, чтобы он выглядел хорошо, а затем нарисуйте каждый кадр в контексте, который вы создали с помощью CGBitmapContextCreate, и захватите изображение с помощью CGBitmapContextCreateImage. Вероятно, самый простой способ анимировать изображения - установить свойство animationImages для UIImageView (хотя есть и другие параметры, например анимации CALayer).
В последних документах Apple наконец-то упоминается, какие форматы пикселей поддерживаются в iOS, поэтому обязательно указывайте их при создании своего растрового контекста.