Использование NSUndoManager с prepareWithInvocationTarget, Gestures и Objects

У меня есть своего рода приложение для рисования. Я хочу реализовать Отменить / Повторить. Хотя я сталкиваюсь с трудностями при сохранении оригинальных и новых значений для отмены / повторения.

С помощью жестов мне нужно хранить несколько вещей: трансформировать, центрировать, для диалога свойств, мне нужно хранить еще много, цвет, шрифт, размер шрифта, контур, цвет контура, сам текст и т. Д.

Я создал NSMutableDictionary Атрибутов, которые пользователь может изменить в Поповере Одного Жеста / Свойства.

Я хотел использовать ответ Роба для NSUndoManager и Жест вращения, хотя использование его решения работает с CGAffineTransform который при отправке в качестве параметра для prepareWithInvocationTarget, это не объект, а просто помещает копию CGAffineTransform структура в стеке Undo/Redo.

Хотя при использовании prepareWithInvocationTarget со мной NSMutableDictionary Словари, которые я передаю (OriginalAttribs, newAttribs), не сохраняются. Я не могу иметь их как локальные iVars, так как они будут меняться при каждом действии на рисованном объекте.

Похоже, я хочу использовать retainArguments как часть NSInvocation хотя я не хочу их оставлять. Мне нужна их копия.

Это жесты, которые делают это трудным, так как я не могу продолжать устанавливать OrigianlCenter, OriginalTransform, когда он изменяется, когда жест активен.

ОБНОВЛЕНИЕ Я нашел эту ссылку, и похоже, что я хочу сделать.

Я настроил свой NSUndoManager следующим образом:

        //Needed to get access to UndoManager
    NSUndoManager * undoManager = [(IoScreenEditorViewController * )UIAppDelegate.ioMainViewController.currentViewController undoManager];

        //Need to Store our Center as a NSValue
    [undoManager prepareWithInvocationTarget:self];
    [undoManager forwardInvocation:anInvocation ];

Затем я получаю ошибку во время выполнения:

 -[NSUndoManager undoAttributesWithOriginalAttributes:newAttributes:]: unrecognized selector sent to instance 0xeedcbd0

undoAttributesWithOriginalAttributes:newAttributes: это селектор, который я настроил для моего объекта NSInvocation. В соответствии с документацией здесь говорится, что она должна передать ее себе (Target), а не отменить сам менеджер?

0 ответов

Другие вопросы по тегам