Как использовать NSUndoManager с UIImageView или CGContext - PullRequest
4 голосов
/ 15 декабря 2009

У меня есть приложение, которое использует cgcontext для рисования объектов в UIImageView, который пользователь рисует, используя сенсорные события, и я хочу иметь возможность отменить рисунки, сделанные пользователем.

Edit:


Я пытаюсь использовать свои касания. Начал сохранять изображение в начале касания к NSUndoManager

.

И как мне использовать его для отмены использования UIAlertView.
Это значит, что я хочу вызвать метод из моего UIAlertView, который отменяет другой, который будет переделывать, но я не знаю, как это сделать.
Пожалуйста, помогите

1 Ответ

3 голосов
/ 31 декабря 2009

Я пишу графическое программное обеспечение для iPhone (http://www.layersforiphone.com/), и я потратил некоторое время, пытаясь выяснить это. Проблема в том, что CGContexts по своей сути не «отменяемы». Вы не можете заполнить прямоугольник или восстановить часть, которую вы перерисовали. Данные просто отсутствуют. По моему опыту, лучше всего создать метод «сохранения», который просматривает изменяемую область и сохраняет данные изображения в этой области в стек отмены. перед выполнением операций рисования. Затем, когда вы решите отменить, вы можете взять измененную область и восстановить ее из сохраненных данных.

Я решил реализовать этот подход независимо от NSUndoManager в слоях, потому что вам в основном нужен стек CGImageRefs и CGRects, и он плохо отображается в NSUndoManager.

Примечание. Технически вы можете просто сохранять копию всего изображения при каждом его изменении. Это плохое использование памяти, поскольку вы можете изменить только небольшую область. Если вы хотите иметь щедрую историю отмен (более 10 шагов), то определенно стоит потратить время на сохранение и восстановление небольших изображений в пределах области рисования.

Надеюсь, это поможет! Я знаю, что это не очень хорошее решение - вы действительно мало что можете сделать со встроенными API. Если вы создадите общее решение этой проблемы, я думаю, что многие заинтересуются этим!

...