Рисование множества UIBezierPaths в виде - PullRequest
6 голосов
/ 05 июня 2011

Я рисую несколько UIBezierPath s на виде, основанном на движениях пальцев.

Каждый раз, когда цикл касаний - Begin / Moved / Ended - завершается, я сохраняю точки и создаю UIBezierPath, который сохраняется в массиве с именем bezierArray. У меня есть еще один массив с именем bezierArrayColors, в котором хранятся цвета каждого пути.

Проблема в следующем. Класс использует drawRect. Насколько я вижу, каждый раз, когда запускается drawRect, он должен нарисовать все пути, которые когда-либо были созданы, и приложение теперь работает медленно.

Это мой drawRect сейчас. Я знаю, что это довольно неубедительно, но я не вижу, как это можно сделать.

- (void)drawRect:(CGRect)rect {
   for (int i=0; i<[self.bezierArray count]; i++) {
        UIBezierPath *aPath = (UIBezierPath*)[self.bezierArray objectAtIndex:i];
        UIColor *aColor = (UIColor*)[self.bezierArrayColor objectAtIndex:i];
    [aPath setLineWidth:LINE_WIDTH];

    [aColor setStroke];
    [aPath stroke];
    }
}

Есть ли способ обводить UIBezierPath разными цветами или, возможно, шириной с использованием подпутей? Я имею в виду, чтобы изменить цвет, ширину и другие свойства подпути? Это позволило бы мне использовать один UIBezierPath с несколькими различными подпутями. Я хотел бы, чтобы один Безье мог быть нарисован и оставлен там без необходимости перерисовки каждый раз. Чего мне не хватает?

Ответы [ 3 ]

6 голосов
/ 05 июня 2011

Убедитесь, что вы обращаете внимание на прямоугольник, который передается в -drawRect :.Если ваш код выбирает простой путь и перерисовывает весь вид каждый раз, когда вызывается -drawRect :, возможно, вы выполняете намного больше рисования, чем это необходимо, по крайней мере, в некоторых случаях.

2 голосов
/ 05 июня 2011

Нарисуйте каждый путь Безье в отдельном подпредставлении.Таким образом, каждый Безье должен быть перерисован только после изменения самого себя.

0 голосов
/ 26 июня 2011

У меня похожая проблема, и я планирую использовать подпредставление для хранения всех «завершенных» путей и другое подпредставление для хранения только пути «в процессе».Таким образом, мне не нужно рисовать все завершенные пути, так как я получаю новые события касания для "в процессе" пути (ов).Когда путь завершен, я перемещаю его в завершенный массив, перерисовываю завершенное подпредставление и жду следующего прикосновения.Это позволяет избежать проблемы «триллионов подпредставлений», а также избежать перерисовки всего массива путей, фактически пытаясь реагировать на прикосновения, которые очень чувствительны к задержкам.Как только я начну, я постараюсь вернуться сюда с некоторым кодом.

...