私はある種の描画アプリを持っています。元に戻す/やり直しを実装したい。元に戻す/やり直しの元の値と新しい値を保存するのに苦労していますが。
Gestures を使用して、いくつかのものを保存する必要があります: トランスフォーム、センター、プロパティ ダイアログの場合、さらに多くのもの、Color、Font、Font-Size、Outline、Outline Color、Text It self などを保存する必要があります。
NSMutableDictionaryユーザーがシングル ジェスチャ/プロパティ ポップオーバーで変更できる属性を作成しました。
Rob の Answer forNSUndoManagerと Rotation Gestureを使用したかったのですが、彼の Solution を使用すると で動作CGAffineTransformし prepareWithInvocationTargetますCGAffineTransform。
ただし、渡した辞書 (OriginalAttribs、newAttribs) で を使用する場合prepareWithInvocationTargetは保持されません。NSMutableDictionary描画オブジェクトに対するアクションごとに変更されるため、ローカル iVar として使用することはできません。
私は本当にそれらを保持したくありませんが、私はretainArgumentsの一部として使用したいようです. NSInvocationそれらのコピーが必要です。
ジェスチャがアクティブな間、OrigianlCenter、OriginalTransform が変更されるため、設定を続けることができないため、これを難しくしているのはジェスチャです。
更新このリンク を見つけましたが、やりたいことに似ているようです。
NSUndoManager を次のようにセットアップします。
//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
undoAttributesWithOriginalAttributes:newAttributes:NSInvocation オブジェクト用に設定したセレクターです。ドキュメントhereによると、元に戻すマネージャーの自己ではなく、自己(ターゲット)に渡す必要があると書かれていますか?