0

Objective C を使用して iPhone アプリを構築しています。私のアプリでは、画像にストロークを描画しており、元に戻す機能とやり直し機能を実装したいと考えています。

私はこれに使用NSUndoManagerしました。これにより、1 レベル下の描画を元に戻すことができますが、私の要件は、可能な限り低いレベル (または少なくとも 10 レベル下) で描画を元に戻すことです。すでにsetLevelsOfUndoを 10 に設定していましたが、機能しません。

私は次のコードを使用しています:

- (void)UnDoImage1:(UIImage*)image
{
    if (capturedImage.image != image)
    {
        [self.managedObjectContext.undoManager undo];
        [[self.managedObjectContext.undoManager prepareWithInvocationTarget:self] UnDoImage1:capturedImage.image];
        [capturedImage release];
        capturedImage.image = [image retain];
    }
}

どこが間違っているか教えてください。私はすでにこれについて長い間グーグルで調べてきましたが、機能の失敗の正確な原因は見つかりませんでした.

4

1 に答える 1

0

prepareWithInvocationTarget:オブジェクトをパラメータとして使用できるとは思いません。capturedImage.imageUndo /RedoStackの周りのコピーを保持するつもりはありません 。したがって、リリースして新しいイメージに設定しているため、元のイメージへの参照は失われ、現在のイメージでUnDoImage1を呼び出すだけです。capturedImage.image

それがあなたが元にした/やり直そうとしている唯一のものであるなら、私はregisterUndoWithTarget:selector:object:それがの参照を保持するのを見るでしょうcapturedImage.image

スコット<-

于 2012-03-20T21:04:11.240 に答える