2011-12-31 2 views
0

Я создал приложение, которое рисует ряд кривых, используя UIBezierPath. Теперь я пытаюсь реализовать в нем функциональные возможности модификации. Чтобы изменить конкретную кривую, я могу сделать, чтобы снова нарисовать все кривые; Я еще не реализовал это. Но я думаю, что этот алгоритм не будет очень эффективным, когда число кривых увеличивается, потому что я должен хранить все точки в массиве, и я должен запускать цикл для каждой кривой каждый раз, когда я перехожу к модификации., какой алгоритм я должен использовать для изменения/изменения кривых

Я ищу более эффективный алгоритм. Это будет полезно, если кто-то может предоставить пример кода.

ответ

0

можно представить индивидуальные кривые как UIBezierPath с и сделать их по отдельности, создавая одну CAShapeLayer за кривые и назначение path свойства формы слоя к соответствующим CGPath свойству пути Безье. Чтобы обновить отдельную кривую, вам просто нужно манипулировать одним контуром безье и соответствующими слоями формы path.

+0

Я понял. У вас есть ссылки на учебник или образец кода? Это будет более полезно. – Harsh

+0

Возможно, вы посмотрите на http://nachbaur.com/blog/core-animation-part-4 и Google немного. – MrMage

+0

Я реализовал с использованием CAShapeLayer. В то время как модификация i не может удалить старый путь. Проблема в том, что я не могу захватить CAShapeLayer из UIView. Это похоже на то, как вы рисуете и ставите UIView, вы не можете изменить его содержимое. Вместо этого вы должны создать новую идею CAShapeLayer.Any? – Harsh

0

Перерисовать кривую до тех пор, пока у вас не будет проблемы с производительностью, измеренной с помощью инструментов. Если это произойдет снова, используйте инструменты, чтобы определить оптимальный способ оптимизации.

Легко втягиваться в трату времени на оптимизации, которые никогда не нужны. Вначале гораздо лучше поставить это время и задуматься о создании «чистого» кода.

+0

Я ищу еще один алгоритм, который является менее громоздким. Мне нужны идеи о встроенных свойствах CGPath, о которых я не знаю и могу быть полезен для реализации моих функций. – Harsh

+0

С вашим вопросом трудно помочь с этим, не зная, какие изменения вы планируете сделать или сколько очков (10 или 10000). Я рисую кривую с более чем 100 точками, обновляя отслеживание движения пальца, и нет заметной проблемы времени перерисовки. – zaph

+0

Основная проблема заключается в том, что я нарисовал несколько кривых и не присоединяюсь к ним. Я хочу изменить конкретную кривую, не затрагивая других. И для этого я могу сделать одно, чтобы перерисовать все кривые. Что вы делаете, когда перерисовываете кривую? – Harsh

Смежные вопросы