Я пытаюсь сделать немного инструмента iPad для рисования простых геометрических объектов (реагируйте, округленный реагируют, эллипс, звезда...). Моя цель состоит в том, чтобы сделать что-то очень близко к Представлению ведущих идей (тянущий функцию), т.е. позволить пользователю добавить реагирование (например), изменяя размер его и перемещая его. Я хочу также пользователя, может выбрать много объектов и переместить их вместе.
Я думал о по крайней мере 3 differents способах сделать это:
Я знаю, что два первых пути идут с функциями, чтобы обнаружить касание к каждому объекту, добавить легко тени... но я боюсь, что они немного слишком тяжелы? Вот почему я думал о последнем пути, который это, кажется, является прямым.
Каким путем будет более эффективное??? Или возможно я не сделал мысли иначе?
Любая справка будет цениться ;-)
Спасибо.
Я бы использовал классы UIKit для рисования, а затем профилировал и оптимизировал ваш код оттуда.
Информация об Apple / iPad: текст ссылки
Моим первым ощущением было сделать третий способ , но чтобы убедиться, сразу после того, как я разместил свое сообщение, я провел несколько тестов с одним глобальным представлением и более чем 200 геометрическими формами (Rect, Rounded Rect и Ellipse) на нем, и я перемещаю только половину с событием touchMoved. Я провел этот тест со способом 1 (создание подклассов UIView) и способом 3 (создание подклассов NSObject), способ 2 кажется мне слишком ограничивающим и совсем не помогает мне. Результат заключается в том, что способ 1 кажется мне будь более эффективным ... Когда я перемещаю 60 объектов вместе, нет лагов! Более того, использование этого способа, вероятно, поможет мне, потому что использование представления включает некоторые интересные функции, такие как обнаружение касания на сложном пути (см. UIBezierPath), иерархию объектов, обрабатываемую классом UIView ...
Так что я буду использовать этот способ и вернусь сюда поделиться своими результатами; -)
С уважением
Лучше использовать объекты CGLayer. Преимущества:
Это намного быстрее и экономичнее по памяти. Для простых объектов добавление представления обходится гораздо дороже и усложняет иерархию представлений. Для сложных объектов кэширование, осуществляемое в CGLayers, может повысить производительность.
Легко группировать объекты вместе. Вы просто помещаете все в новый слой, и вуаля! Накладных расходов почти нет.
Использование CGLayer и других объектов Quartz дает вам гораздо больше гибкости.
Единственный недостаток в том, что вам придется напрямую использовать Quartz 2D. Это не очень сложно, но требует некоторого обучения, если вы не использовали его раньше.
CAShapeLayer практически полностью справляется с вашим вариантом 2. По умолчанию он делает прямоугольник и закругленный прямоугольник (см. angleRadius), или вы можете задать ему путь для любой произвольной формы. Для варианта 1 вы можете использовать CAShapeLayer с UIView вместо реализации drawRect, и это может быть быстрее.