Tuesday, April 24, 2012

Add an undo/redo method to core graphic draw app

I am trying to implement an undo/redo method using NSUndoManager. I have asked other questions on this, but am still stuck.



Where I am at the moment is as follows:



.h
NSUndoManager *undoManager;
@property(nonatomic,retain) NSUndoManager *undoManager;

.m
@synthesize undoManager;


[undoManager setLevelsOfUndo:99];
viewdidload:



NSNotificationCenter *dnc = [NSNotificationCenter defaultCenter];      
[dnc addObserver:self selector:@selector(undoButtonTapped) name:@"undo" object:nil];
[dnc addObserver:self selector:@selector(redoButtonTapped) name:@"redo" object:nil];

- (void)resetTheImage:(UIImage*)image
{
NSLog(@"%s", __FUNCTION__);

// image = savedImage.image;
if (image != drawImage.image)
{
[[undoManager prepareWithInvocationTarget:self] resetTheImage];
image = drawImage.image ;
} else {
NSLog(@"That didn't work");
}
}

- (void)undoButtonTapped {
NSLog(@"%s", __FUNCTION__);
[undoManager undo];
}


I get "That didn't work"...



I would appreciate help. I will post the answer to my original question when I figure out what I'm doing wrong.



---EDIT---



I have changed resetTheImage as follows:



- (void)resetTheImage:(UIImage*)image
{
NSLog(@"%s", __FUNCTION__);

image = savedImage.image;
if (image != drawImage.image)
{
drawImage.image = image;
savedImage.image = image;
NSLog(@"undo image");
[[self.undoManager prepareWithInvocationTarget:drawImage.image] image];

} else {
NSLog(@"same image");
savedImage.image = image;
}
}


However, confusion rains - it may help if someone (Brad?, Justin?) can provide a bullet point list of the steps I need to take to get this working. For example:



. Add notifications in ...
. Trigger notifications....
. Have undo /redo buttons point to...
. What methods/functions I really need to build..
....



I wish SO would allow me to give you more points than 1..



(It doesn't help that my "o" key is getting wonky)
It does help that I had a baby granddaughter yesterday :))))





No comments:

Post a Comment