0

Core Data なしでアプリを作成しました。このアプリには、ジェスチャー、色、テキストによるビューの操作など、多くの機能があります。

私がやりたいのは、元に戻す機能とやり直し機能を使用することです。
Core Data と NSUndoManager に関するすべてを読みましたが、理解するのに問題があります。私がやろうとしていることがすべてうまくいかないからです。

私の質問は: Core Data なしで NSUndoManager を使用することは可能ですか?
そして:ビューの元に戻すにはどうすればよいですか?

1 つの操作で aView (UIImageView) というオブジェクトを変更できます undoManager に情報を登録します

編集

- (IBAction)rotationDetected:(UIRotationGestureRecognizer *)gestureRecognizer {

    static CGFloat initialRotation;
    if (gestureRecognizer.state == UIGestureRecognizerStateBegan){
        initialRotation = atan2f(gestureRecognizer.view.transform.b, gestureRecognizer.view.transform.a);
    }
    CGFloat newRotation = initialRotation + gestureRecognizer.rotation;
    aView.transform = CGAffineTransformMakeRotation(newRotation);

    //undo
    [self.undoManager registerUndoWithTarget:self selector:@selector(rotationDetected:)object:aView];
    [self.undoManager setActionName:NSLocalizedString(@"viewChanged",@"title undo")];
}

クリックされたボタンによって呼び出される元に戻すメソッドは、次のとおりです。

-(void)undo: (id) sender{ 

    [aView.undoManager undo];
    [[self undoManager] undo];
}

undoManager.canUndo == YES かどうかを尋ねる if-clause を挿入すると、undoManager は元に戻せないことが返されます。
これは、undoManager が nil であることを意味します。しかし、なぜでしょうか? 私は何か見落としてますか?

4

1 に答える 1

0

NSUndoManagerはい、コアデータとは別にご利用いただけます。NSUndoManagerに関する情報はたくさんあります。

もっと読んで、NSUndoManagerできることとできないことを理解し、それがUIViewsなどにどのように適合するかを確認する必要があります。おそらく、コアデータについてはしばらく忘れて、に集中してNSUndoManagerください。

「私がやろうとしていることはすべて...うまくいかないからです」-特定の問題がある場合は、StackOverflowで質問できます。「うまくいかない」というだけでは具体的なことはお答えできません。

の仕様以外にも、NSUndoManager元に戻す操作とやり直し操作に関連する設計パターンがあります。たとえば、コマンド パターンです。たとえば、「元に戻す」機能の最適な設計パターンを参照してください。

于 2012-12-05T13:23:19.260 に答える