Рисование нескольких преобразованных изображений с помощью Quartz на iPhone

Я пытаюсь понять, как лучше всего выполнить рисование сцены в приложении для iphone. Вот такая ситуация:

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

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

Некоторые возможные решения, о которых я могу думать:

  • Использовать кварц: нарисуйте фон для cgcontext представления. Создайте несколько CGLayers и нарисуйте на них текст / изображения. Преобразуйте CGlayers (можете ли вы это сделать?), Затем нарисуйте слои в основном CGContext.

  • используйте OpenGL: пожалуйста, нет. если мне действительно не нужно.

Идеи?

Спасибо.


person aloo    schedule 07.07.2009    source источник


Ответы (2)


В основном согласен с Марко. CA идеально подходит для этой работы. Настройте вид и добавьте кучу слоев.

Но пара моментов.

Вы можете рисовать текст напрямую, используя методы категории NSString UIStringDrawing. работает очень хорошо и не требует накладных расходов, связанных с UILabel.

Рисование с помощью CoreGraphics выполняется не слишком медленно, потому что CoreAnimation интеллектуально кэширует слой. То есть он рисуется только один раз, а затем CA анимирует копию, если слою не будет отправлено сообщение setNeedsDisplay.

person amattn    schedule 07.07.2009
comment
А пока, перед анимацией, я должен просто использовать CGLayers? Также - в чем разница между CoreGraphics и CoreAnimation? Они оба являются частью Quartz? У меня проблемы с различением разных имен .... У кого-нибудь есть хорошие ресурсы для CoreAnimation / CALayers / CGLayers? - person aloo; 08.07.2009
comment
CGLayers являются частью Core Graphics. CALayers являются частью Core Animation. Ни то, ни другое не является частью другого, но можно предположить, что Core Animation использует Core Graphics под капотом. Разница в том, что Core Animation предназначена для упрощения анимации объектов, тогда как Core Graphics предназначена только для рисования графики. - person Peter Hosey; 08.07.2009

Используйте CoreAnimation CALayers для изображений (вы можете применять к ним преобразования) и UILabels для текста. Рисование с помощью CoreGraphics будет слишком медленным для анимации.

person Marco Mustapic    schedule 07.07.2009