1

選択した画像を UIView に追加するプロジェクトがあります。画像を追加したら、その画像を移動、回転、ズームできます。しかし、間違った画像を選んでしまい、元に戻したいとしましょう。このようなものを処理する適切な方法は何でしょうか? また、複数を追加したとしましょうが、それらをすべてビューからクリアしたいのですが、これにはどのような方法が適切でしょうか?

これが私がこれまでに試したことです:

-(IBAction)undoButtonTapped
{
    self.stampedImageView.image = nil;
}

これにより、以前のアクションが正常に元に戻されますが、それだけです。2つ以上の画像を追加するとしましょう。すべてではなく、1 つまたは複数のアクションを元に戻したい場合があります。これは、最新のアクションのみを元に戻します。

例:

User adds three stamps
To undo 2 stamps:  tap the undo button twice
To delete all stamps:  tap the delete button once

ワンボタンタップですべてのスタンプを削除する方法を見つけました。下記参照。

コードを削除:

UIView * subview;
while ((subview = [[imageView subviews] lastObject]) != nil)
{
    [subview removeFromSuperview];
}
4

1 に答える 1

0

ビューのサブビューをループして、特定のサブビューがイメージ ビューであるかどうかをテストしてから、removeFromSuperview を必要な数だけ呼び出すことができます。サブビューのビューは追加された順序と同じになるため、最後の n 個のアイテムを削除するには、画像ビューの配列を最後から列挙する必要があります。例として、このメソッドは最後に追加された 3 つの画像ビューを削除します。

-(IBAction)deleteThree:(id)sender {
    NSIndexSet *indxs = [self.view.subviews indexesOfObjectsPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) {
        return [obj isKindOfClass:[UIImageView class]];
    }];

    __block int i = 0;
    [indxs enumerateIndexesWithOptions:NSEnumerationReverse usingBlock:^(NSUInteger idx, BOOL *stop) {
        [[self.view.subviews objectAtIndex:idx] removeFromSuperview];
        i++;
        if (i==3) 
            *stop = YES;
    }];
}
于 2012-10-03T00:36:17.933 に答える