Reset Undo / Redo Array iOS

Я хочу отменить и повторить штрихи и изменения в приложении для рисования с помощью NSUndoManager. Я сохраняю изображение с помощью UIGraphicsGetImagefromCurrentImageContext () в изменяемом массиве.

Мой код ниже дает представление:

- (void) performUndoRedo:(BOOL) undo
{
    if (undo)
    {
        [undoManager undo];
    }
    else
    {
        [undoManager redo];
    }

    NSLog(@"layerArray:%@", layerArray);

    [self drawImage:[layerArray lastObject]];
}

- (void) redo:(id) object
{
    [layerArray addObject:object];
    [[undoManager prepareWithInvocationTarget:self] undo:object];
    [undoManager setActionName:@"drawredo"];
    // NSLog(@"layerArray IN REDO:%@", layerArray);
}

- (void) undo:(id) object
{
    [[undoManager prepareWithInvocationTarget:self] redo:object];
    [undoManager setActionName:@"drawundo"];
    [layerArray removeObject:object];
    // NSLog(@"layerArray IN UNDO:%@", layerArray);
}

- (void) touchesEnded:(NSSet *) touches withEvent:(UIEvent *) event
{
    UIGraphicsBeginImageContext(self.bounds.size);
    [self.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *layerImage = UIGraphicsGetImageFromCurrentImageContext();

    [layerArray addObject:layerImage];
    [self undo:layerImage];
    UIGraphicsEndImageContext();

    NSLog(@"%@", layerArray);
}

Как и в какой момент действия я могу очистить layerArray и сбросить стек отмены? заранее спасибо


person Ganesh Nayak    schedule 23.04.2012    source источник
comment
удалось ли вам выполнить операции Undo Redo   -  person Ranjit    schedule 10.07.2012
comment
Вы нашли какое-либо решение для этого. Я тоже сталкиваюсь с этой же проблемой. Было бы полезно для меня, если бы кто-нибудь имел представление об этом.   -  person Madhavan    schedule 10.01.2018


Ответы (1)


Похоже, вы можете использовать методы в каждом из этих классов для очистки:

person ckhan    schedule 23.04.2012
comment
Мой вопрос в том, когда мне следует сбросить NSUndoManager и NSMutableArray? - person Ganesh Nayak; 23.04.2012
comment
Хм, это не так, как читается ваш вопрос выше: первая строка - «Я хочу сбросить», а не «Когда мне следует сбросить». Я не понимаю, в чем заключается настоящая проблема: есть ли в вашем стеке отмены действия, которые являются нежелательными? Другими словами: почему вы хотите его сбросить? - person ckhan; 23.04.2012
comment
Когда я вхожу в систему, layerArray продолжает расти. Мне нужен способ очистить этот массив, когда другой набор действий заменяет предыдущее действие в стеке отмены. - person Ganesh Nayak; 23.04.2012