2012-04-09 1 views
1

Мне нужно было создать небольшое приложение для рисования/рисования, поэтому я обратился к Beginning IPad Development for IPhone Developers: Mastering the IPad SDK By Jack Nutting, Dave Wooldridge, David Mark.Улучшение производительности чертежа (для приложения Dudel)

Это довольно хорошо. Архитектура сильная. Но приложение рисования (Dudel) не очень хорошее с точки зрения производительности. Есть два основных вопроса (для меня, на данный момент):

  1. Самое важное: чертеж замедляется через некоторое время. Причина: drawRect вызывается каждый раз для всех путей.
  2. Рисунок с инструментом Карандаш не является гладким. Причина: Используется addLineToPoint: вместо (может быть) addQuadCurveToPoint:.
  3. Нет управления ластиком. Но это действительно не проблема, потому что мы можем выбрать белый цвет для картины, которая дает иллюзию ластика. Но, если для этого есть более эффективная реализация, мне интересно узнать.

Вопрос:

Есть ли решение, что там решает эти проблемы, и обеспечивают простое, но эффективное приложение для рисования?

Примечание: Мне нужна функция Отменить/Повторить.

+0

Вы нашли решение для своего пункта 1? –

+1

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

ответ

1

Позвольте мне попытаться ответить на ваш вопрос один за другим.

Рисунок с инструментом для карандашей не является гладким. Причина: используется addLineToPoint: вместо (может быть) addQuadCurveToPoint :.

То, что вы говорите, является истинным. Устройство IOS ищет касания в определенный интервал. Если вы быстро двигаете рукой, очень вероятно, что вы можете потерять несколько точек касания. Следовательно, соединение точек с использованием линий приводит к уродливым шипам.

Мы можем сгладить кривую с помощью алгоритмов curve fitting. Однако некоторые изменения в чертеже могут привести к заметному улучшению качества. Here - пример этого.

управления Eraser

Если вы знаете, цвет фона, вы можете использовать, что, как цвет кисти, чтобы дать ластик чувство. если вы не знаете фона вы можете использовать

CGContextSetBlendMode(context, kCGBlendModeClear); 

Undo/Redo

вы можете использовать NSUndoManager.