Лучший способ ускорить многократное использование "CGContextDrawRadialGradient" в Drawrect? - PullRequest
0 голосов
/ 08 марта 2011

Не удалось опубликовать изображение, но я использую метод "CGContextDrawRadialGradient", чтобы нарисовать затененный синий шар (~ 40 пикселей в диаметре), его тень и сделать "пульсирующее" белое кольцо вокруг шара (внутреннего и внешнего).градиенты на ринге).Кольцо начинается по краям синего шара и расширяется наружу (радиус увеличивается с таймером).Белое кольцо исчезает, расширяясь, как радиоволна.

Отлично смотрится в симуляторе, но работает невероятно медленно на iPhone 4. Кольцо должно пульсировать примерно за секунду (как в симуляторе), но занимает15-20 секунд по телефону.Я немного читал о CALayer, CGLayer и читал некоторые сегменты на некоторой градиентной анимации, но не ясно, что я должен использовать для лучшей производительности.

Как мне это ускорить.Должен ли я положить мяч на слой и расширяющееся кольцо на другой слой?Если да, то как мне узнать, какой слой обновить на вытяжке?

Цените любые указания.Спасибо.

1 Ответ

1 голос
/ 27 апреля 2011

Единственный способ ускорить что-то подобное - это предварительно отрендерить.Определите, сколько кадров изображений вам нужно, чтобы он выглядел хорошо, а затем нарисуйте каждый кадр в контексте, который вы создали с помощью CGBitmapContextCreate, и захватите изображение с помощью CGBitmapContextCreateImage.Вероятно, самый простой способ анимировать изображения - установить свойство animationImages для UIImageView (хотя есть и другие параметры, например анимации CALayer).

В новейших документах Apple наконец-то упоминаются, какие форматы пикселей поддерживаются в iOS,убедитесь, что ссылается на те, которые создаются при создании вашего растрового контекста.

...