Sử dụng NSUndoManager. Tuy nhiên, nếu bạn đang vẽ các đường trên khung vẽ, bạn cũng sẽ cần phải giữ nguyên hình đại diện của chúng (để bạn có thể bật chúng ra).
Vì vậy, cho dù bạn thu thập chúng dưới dạng UIBezierPath hay sử dụng các lớp hình dạng hay "mảng điểm" của riêng bạn, bạn hoàn tác theo cách tương tự.
Vì vậy, trong khi vẽ đường, giữ một bản ghi các điểm bạn đã sử dụng trong bản vẽ của mình. Khi bản vẽ được thực hiện (ví dụ: chạm vàoEnded), bạn muốn "đẩy" bản vẽ của mình và cho người quản lý hoàn tác biết cách hoàn tác bản vẽ đó. Đơn giản, nó sẽ là một cái gì đó như thế này gần như mã ...
- (void)pushDrawing:(Drawing*)drawing
{
[self.stack push:drawing];
[self.undoManager registerUndoWithTarget: self
selector: @selector(popDrawing)
object: nil];
}
- (void)popDrawing:(Drawing*)drawing
{
Drawing *drawing = [self.stack pop];
[self.undoManager registerUndoWithTarget: self
selector: @selector(pushDrawing:)
object: drawing];
}
Nếu bạn đang sử dụng một canvas, bạn có thể phải vẽ lại toàn bộ điều, đặc biệt là khi popping một bản vẽ. Nếu bạn đang sử dụng chế độ xem hoặc lớp, bạn có thể không ...
Xem tài liệu dành cho NSUndoManager ... tài liệu này có sẵn trên iOS và có các ví dụ hay. Nó "nhớ" nếu bạn undo-ing hoặc redo-ing, và sẽ làm điều đúng, do đó, ở trên có thể được thực hiện như một chức năng (nhưng nó dễ dàng hơn để hiểu lúc đầu với một chức năng đi mỗi hướng).
Nguồn
2012-04-10 18:56:32
bạn đã thử sử dụng lớp được xây dựng trong NSUndoManager – MCKapur
tính năng này có sẵn trong Mac OS X v10.0 trở lên không có trong iOS. và ứng dụng của tôi nằm trong iOS – Mashhadi
và iOS 3.0 trở lên: https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSUndoManager_Class/Reference/Reference.html –