Подтвердить что ты не робот

Изображения против основной графики

На устройствах iOS, в каких случаях лучше рисовать графику с использованием Core Graphics, чем с помощью файлов изображений?

В чем преимущества этого в плане ресурсов?

4b9b3361

Ответ 1

Изображения против Core Graphics - это тупое различие. Методы визуализации закадровой/экранной графики более сложны до такой степени, что вам нужно использовать инструменты, чтобы узнать, что на самом деле происходит. Я попытался дать обзор здесь, но этот ответ мог бы использовать некоторые улучшения от более знающих людей.

GPU против CPU рендеринга

Графика всегда отображается на экране графическим процессором. Тем не менее, они могут быть сгенерированы GPU или CPU, и происходить в коде пользователя или в отдельном процессе, называемом "сервер рендеринга". Вот обзор:

CPU, код пользователя:

  • Основная графика и основной текст
  • drawRect(). Результат обычно кешируется.

GPU, сервер рендеринга:

  • CALayer с параметром shouldRasterize YES. Это создает кэш слоя и подслоев.

GPU, сервер рендеринга, очень медленный:

  • CALayer с использованием масок (setMasksToBounds) и динамических теней (setShadow*).
  • Непрозрачность группы (UIViewGroupOpacity).

GPU, быстрый:

  • Создание изображений из файлов PNG. Растяжение в растягиваемых изображениях - это только GPU.

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

Растровые изображения против рисования

Файлы изображений, как правило, быстрее.

  • Файлы изображений могут быть загружены на диск заранее с использованием агрессивного кэширования.
  • Изображения могут быть прочитаны и распакованы с диска на заднем плане.
  • Изображения могут быть кэшированы в памяти, если вы используете imageNamed: вместо initWithData:

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

  • Вы можете анимировать сложную графику без потери качества, потому что графика перезаписывается на каждом кадре.
  • Вы можете создавать графику с i18n на лету.
  • Вы должны отключить неявную анимацию Core Graphics, если она вам не нужна. Пример: UIView с закругленными углами (вам просто нужно округление, а не анимация).
  • Рисование может быть достаточно сложным, так что вам нужно использовать инструменты, чтобы увидеть, куда идет время.
  • Рисование с помощью drawRect, вероятно, кэшируется, если вы не используете маскирование, тени, сглаживание краев или прозрачность группы. Вы можете запросить вызов кэширования -[CALayer setShouldRasterize:YES] и -[CALayer setRasterizationScale:].

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


Производительность - это только проблема, если ее недостаточно. Используйте все, что быстрее, чтобы кодировать, если не нажано иначе. Самая быстрая программа - та, которая первыми выходит на рынок.

Некоторое интересное чтение:

Ответ 2

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

Ответ 3

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

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

Базовая графика также очень полезна для приложений типа моделирования.