Как отменить и повторить плавную линию в iPhone? - PullRequest
6 голосов
/ 29 марта 2012

Я работаю над приложением, и мне нужно нарисовать плавную линию, поэтому я пошел по этой ссылке, чтобы сгладить линию Алгоритм рисования сглаженного эскиза iPhone , и я последовал ответу kyoji.Но сейчас я не знаю, как реализовать функциональность Undo Redo.

Пожалуйста, помогите

1 Ответ

0 голосов
/ 10 апреля 2012

Используйте NSUndoManager.Однако, если вы рисуете линии на холсте, вам также необходимо сохранить их представление (чтобы их можно было удалить).

Итак, собираете ли вы их как UIBezierPath или используете shapeслои или ваш собственный «массив точек», которые вы отменяете таким же образом.

Поэтому, рисуя линию, ведите учет точек, которые вы использовали в своем чертеже.Когда рисование закончено (например, touchesEnded), вы хотите «протолкнуть» свой чертеж и сообщить менеджеру отмены, как его отменить.Проще говоря, это было бы что-то вроде этого почти-кода ...

- (void)pushDrawing:(Drawing*)drawing
{
    [self.stack push:drawing];
    [self.undoManager registerUndoWithTarget: self
                                    selector: @selector(popDrawing)
                                      object: nil];
}

- (void)popDrawing:(Drawing*)drawing
{
    Drawing *drawing = [self.stack pop];
    [self.undoManager registerUndoWithTarget: self
                                    selector: @selector(pushDrawing:)
                                      object: drawing];
}

Если вы используете один холст, вам, возможно, придется перерисовать всю вещь, особенно когда вытаскивает рисунок.Если вы используете представления или слои, вы не можете ...

Посмотрите документы для NSUndoManager ... он доступен на iOS и имеет хорошие примеры.Он «запоминает», если вы отменяете или переделываете, и будет делать правильные вещи, поэтому вышеприведенное можно реализовать как одну функцию (но сначала это проще понять, когда одна функция движется в каждом направлении).

...