Я будую iPhone-додаток з метою C. У своєму додатку я малюю штрихи на зображення і хочу застосувати функції скасування та повторення.
Я використовував NSUndoManager
для цього. За допомогою цього я можу відмінити мою малювання на одному рівні, але моя вимога - відмінити малюнок на найнижчому рівні (або, принаймні, мінімум на 10 рівнів внизу). Я вже встановив setLevelsOfUndo
до 10, але це не працює.
Я використовую наступний код:
- (void)UnDoImage1:(UIImage*)image
{
if (capturedImage.image != image)
{
[self.managedObjectContext.undoManager undo];
[[self.managedObjectContext.undoManager prepareWithInvocationTarget:self] UnDoImage1:capturedImage.image];
[capturedImage release];
capturedImage.image = [image retain];
}
}
Будь ласка, дайте мені знати, де я невірний. Я вже довгий час займався пошуком Google, але не знайшов точної причини відмови від функціональності.
Відповіді:
0 для відповіді № 1Я не вірю, що ви можете використовувати prepareWithInvocationTarget:
з об'єктом як параметр. Його не збирається зберігати копію capturedImage.image
навколо для стек скасування / повторення. Отже, оскільки ви випускаєте його та встановлюєте його на нове зображення, посилання на оригінал втрачається, і ви просто будете викликати UnDoImage1: з поточним capturedImage.image
Якщо це єдине, що ви хочете скасувати / переробити, тоді я б дивився на це registerUndoWithTarget:selector:object:
це буде тримати на згадку про capturedImage.image
.
Скотт <-