iPhone - лучший способ импортировать / рисовать графические элементы пользовательского интерфейса? CGContextDrawPDFPage? - PullRequest
1 голос
/ 26 мая 2010

Как лучше всего использовать пользовательскую графику пользовательского интерфейса на iPhone?

Я сталкивался с CGContextDrawPDFPage и Паникой Шринкит . Должен ли я использовать PDF-файлы для хранения векторной пользовательской графики и загружать их, используя CGContextDrawPDFPage для их рисования.

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

  1. PNG (растровое изображение)
  2. Пользовательский код чертежа UIView (генерируется из Непрозрачность )
  3. PDF (я не использовал этот метод, это с CGContextDrawPDFPage?)

Этот вопрос касается только векторной графики (но я думаю, что некоторые люди могут использовать только растровые изображения?). Ищете, что является стандартным / наиболее эффективным / наиболее эффективным.

Редактировать: Баунти добавил, мне интересно услышать процесс от любого, кто работает с дизайнерами пользовательского интерфейса или сам является дизайнером пользовательского интерфейса. И указатели на независимость разрешения, то есть для будущего iPad / iPhone HD.

Большое спасибо Росс

Ответы [ 2 ]

1 голос
/ 28 июля 2010

Я наткнулся на этот вопрос, потому что у меня тоже есть вопрос о PDF. Я работаю вместе с дизайнером пользовательского интерфейса, и мы успешно используем PDF-файлы для создания элементов пользовательского интерфейса. Например: для кнопки у нас есть 3 PDF для ВКЛ, ВЫКЛ и тени. Я написал кусок кода, который превращает PDF в UIImage. Он может масштабировать полученное изображение и даже раскрашивать его, чтобы иметь один шаблон для множества стилей кнопок. Работает довольно хорошо:)

Наша проблема в том, что мы не можем масштабировать векторную графику без потери качества. Вот почему мы решили использовать достаточно большую графику, и нам нужно только уменьшить ее. Но я все еще задаюсь вопросом, есть ли способ увеличить PDF-файл, прежде чем вывести его в контекст и создать UIImage. Вот мой пост .

1 голос
/ 30 мая 2010

Я могу предложить 3 разных способа, 2 из которых вы уже упомянули:

  1. Создание пользовательского UIView.
  2. Рисование в CGLayer.
  3. загрузка из PDF.

У каждого есть свои преимущества, в зависимости от того, что вы хотите сделать:

UIView vs CGLayer

С точки зрения производительности (для одноразового рисования) и простоты использования между ними не должно быть большой разницы (есть незначительные различия, но ничего серьезного). Очевидно, Opacity может экспортировать исходный код для обоих (я лично не использовал его). Тем не менее, есть вещи, которые вы должны рассмотреть, прежде чем выбрать:

  1. Если у вас фиксированное изображение (о чем ваш вопрос говорит), используйте CGLayer. Объекты CGLayer будут кэшироваться на графическом устройстве, поэтому их повторное использование намного быстрее. Даже если кэш очищен, вы все равно используете тот же объект для перерисовки, что означает, что вам не нужно его заново создавать.
  2. С другой стороны, если вам нужно изменить чертеж, когда пользователь взаимодействует с приложением, UIView может быть быстрее, поскольку у вас есть возможность обновлять только одну часть изображения вместо весь вид.
  3. CGLayer не зависит от пользовательского интерфейса. Так что тот же код отлично работает для Mac / iPhone / iPad или даже для сохранения в файлы.

Заключение : Используйте CGLayer, если это не особый случай.

CGLayer (при рисовании кода) и PDF (загрузка из файла)

У меня нет никакого эталона для этого, но я ожидаю, что CGLayer будет немного быстрее: (1) нет необходимости читать файл. (2) команды pdf должны быть преобразованы в графические элементы системы, что более или менее похоже на создание CGLayer. (3) Я не уверен в том, как кэшируются страницы PDF, но я не ожидаю, что это будет быстрее, чем CGLayer. В любом случае, все это не должно иметь большого значения, если вы не хотите оптимизировать до последнего миллисекунды. Опять же, выбор должен основываться на вашем случае использования:

  1. CGLayer дает вам больше гибкости в коде . Ваш единственный доступ к PDF-странице - через CGContextDrawPDFPage, что означает, что даже простые задачи, такие как масштабирование / преобразование чертежа, будут сложнее.
  2. С другой стороны, использование PDF-файлов более гибко после завершения кода . Вы можете просто обновить PDF-файл новым файлом в любое время, загрузить его из Интернета и т. Д.
  3. Создание PDF может быть проще, чем кодирование чертежа. Вы можете использовать любое приложение, которое вам нужно, вам не нужно беспокоиться об API и системных ресурсах. В конце концов, код может выводить файл PDF, а не наоборот.

Заключение : Если вам не нужно много делать с чертежом (просто хотите показать значок или что-то еще), перейдите к PDF. если вам нужно поработать над этим в приложении, рассмотрите CGLayer.

Конечно, вы всегда можете смешивать подходы так, как считаете нужным: например, Загрузите файл PDF, поместите его в CGLayer, чтобы настроить его, нарисуйте его с помощью UIView, где вы можете поместить значок на него!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...