Лучший способ реализовать опции рисунка как Представление ведущих идей

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

Я думал о по крайней мере 3 differents способах сделать это:

  • Расширяет UIView для каждого типа объекта, класс для Rect, другого для Эллипса... С пользовательским методом рисования. Затем добавьте это представление как подпредставление глобального представления.
  • Расширяет CALayer для каждого типа объекта, класс для Rect, другого для Эллипса... С пользовательским методом рисования. Затем добавьте этот слой как подуровня глобального слоя представления.
  • Расширяет NSObject для каждого типа объекта, класс для Rect, другого для Эллипса... С просто методом рисования, который доберется как аргумент CGContext и Rect и потянет непосредственно форму в нем. Те методы назовет метод рисования глобального представления.

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

Каким путем будет более эффективное??? Или возможно я не сделал мысли иначе?

Любая справка будет цениться ;-)

Спасибо.

6
задан Johann Fradj 10 May 2010 в 07:30
поделиться

4 ответа

Я бы использовал классы UIKit для рисования, а затем профилировал и оптимизировал ваш код оттуда.

Информация об Apple / iPad: текст ссылки

1
ответ дан 17 December 2019 в 22:11
поделиться

Моим первым ощущением было сделать третий способ , но чтобы убедиться, сразу после того, как я разместил свое сообщение, я провел несколько тестов с одним глобальным представлением и более чем 200 геометрическими формами (Rect, Rounded Rect и Ellipse) на нем, и я перемещаю только половину с событием touchMoved. Я провел этот тест со способом 1 (создание подклассов UIView) и способом 3 (создание подклассов NSObject), способ 2 кажется мне слишком ограничивающим и совсем не помогает мне. Результат заключается в том, что способ 1 кажется мне будь более эффективным ... Когда я перемещаю 60 объектов вместе, нет лагов! Более того, использование этого способа, вероятно, поможет мне, потому что использование представления включает некоторые интересные функции, такие как обнаружение касания на сложном пути (см. UIBezierPath), иерархию объектов, обрабатываемую классом UIView ...

Так что я буду использовать этот способ и вернусь сюда поделиться своими результатами; -)

С уважением

0
ответ дан 17 December 2019 в 22:11
поделиться

Лучше использовать объекты CGLayer. Преимущества:

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

  2. Легко группировать объекты вместе. Вы просто помещаете все в новый слой, и вуаля! Накладных расходов почти нет.

  3. Использование CGLayer и других объектов Quartz дает вам гораздо больше гибкости.

Единственный недостаток в том, что вам придется напрямую использовать Quartz 2D. Это не очень сложно, но требует некоторого обучения, если вы не использовали его раньше.

0
ответ дан 17 December 2019 в 22:11
поделиться

CAShapeLayer практически полностью справляется с вашим вариантом 2. По умолчанию он делает прямоугольник и закругленный прямоугольник (см. angleRadius), или вы можете задать ему путь для любой произвольной формы. Для варианта 1 вы можете использовать CAShapeLayer с UIView вместо реализации drawRect, и это может быть быстрее.

0
ответ дан 17 December 2019 в 22:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: