iOS: нужны материалы для разработки эффективного (ориентированного на производительность) приложения для рисования - PullRequest
0 голосов
/ 13 февраля 2012

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

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

Мне нужны некоторые сведения о том, как эффективно реализовать эту функцию рисования.Я имею в виду следующие вещи -

  1. Использование UIView's InvalidateRect и drawRect

Иметь UIView для основного холста и для каждого вставленного объекта - сделать недействительным соответствующий прямоугольник и перерисовать всеобъекты, которые пересекают этот прямоугольник в функции drawRect UIView.

  1. Есть UIView и использовать CALayer?каждый продолжает упоминать о CALayer, я не имею большого представления об этом, прежде чем я решусь на это, я хотел бы быстро узнать, стоит ли этот маршрут.например, https://developer.apple.com/library/ios/#qa/qa1708/_index.html

  2. Иметь UIImageView в качестве холста, и при рисовании каждого объекта мы делаем это: i) Рисуем объект в CGContext за пределами экрана, в основном, создаем новый CGContext с помощью UIGraphicsBeginImageContext, рисуем формуИзвлеките изображение из этого контекста CG и используйте его в качестве источника свойства изображения UIImageView, но здесь, как сделать недействительной только часть UIImageView, чтобы обновлять только эту область.

Не могли бы вы предложить лучший подход?Есть ли другой эффективный способ сделать это?

Спасибо.

Ответы [ 2 ]

1 голос
/ 13 февраля 2012

Если вы хотите рисовать полигоны, вам придется использовать Quartz framework, а ваши методы рисования основаны на CALayer.Неважно, в какой ракурс вы поместите CALayers, UIImageView или UIView.Я скажу UIView, так как вам не понадобятся свойства или методы UIImageView для рисования.

1 голос
/ 13 февраля 2012

Использование UIImage более эффективно для рендеринга нескольких объектов. Но использование CALayer более эффективно при перемещении и изменении одного объекта, потому что вам не нужно изменять другие объекты. Поэтому я думаю, что лучший подход - это использовать UIImage для общего рисования и CALayer для изменяемой фигуры. Другими словами:

  • используйте CALayer для рисования добавляемой или изменяемой фигуры, но не рисуйте ее на UIImage
  • используйте UIImage, чтобы нарисовать другие фигуры

Но OpenGL по-прежнему является наиболее эффективным решением, но не беспокойтесь об этом, если у вас мало объектов для рисования.

...