我有各种各样的绘图应用程序。我想实现撤消/重做。虽然我在为Undo / Redo存储原始值和新值时遇到了困难。
使用手势我需要存储一些东西:变换,中心,对于属性对话框,我需要存储更多,颜色,字体,字体大小,轮廓,轮廓颜色,文本自我等等< / p>
我创建了一个NSMutableDictionary
属性,用户可以在单个手势/属性弹出窗口中更改这些属性。
我想使用Rob's Answer for NSUndoManager
and Rotation Gesture虽然使用他的解决方案与CGAffineTransform
一起使用,当prepareWithInvocationTarget
作为参数发送时,它不是一个对象而只是放一个{撤消/重做堆栈上的{1}}结构。
虽然在我CGAffineTransform
使用prepareWithInvocationTarget
时,我传入的字典(OriginalAttribs,newAttribs)不会被保留。我不能将它们作为本地iVars,因为它们会随着绘图对象上的每个动作而改变。
似乎我想将NSMutableDictionary
用作retainArguments
的一部分,尽管我并不想保留它们。我需要一份副本。
它的手势使得这很困难,因为我无法在手势处于活动状态时随时更改OrigianlCenter,OriginalTransform。
更新 我发现了这个link,它似乎与我想做的相似。
我设置了我的NSUndoManager:
NSInvocation
然后我收到运行时错误:
//Needed to get access to UndoManager
NSUndoManager * undoManager = [(IoScreenEditorViewController * )UIAppDelegate.ioMainViewController.currentViewController undoManager];
//Need to Store our Center as a NSValue
[undoManager prepareWithInvocationTarget:self];
[undoManager forwardInvocation:anInvocation ];
-[NSUndoManager undoAttributesWithOriginalAttributes:newAttributes:]: unrecognized selector sent to instance 0xeedcbd0
是我为NSInvocation对象设置的选择器。根据文档here,它说它应该传递给自己(目标),而不是撤销经理自己?