私はある種の描画アプリを持っています。元に戻す/やり直しを実装したい。元に戻す/やり直しの元の値と新しい値を保存するのに苦労していますが。
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によると、元に戻すマネージャーの自己ではなく、自己(ターゲット)に渡す必要があると書かれていますか?