13

皆さん、こんにちは。

私は初心者で、数日間これを解決しようとしています。

UItouch を介してビューに画像を追加しています。ビューには、新しい画像が追加される背景が含まれています。背景である UIImage を削除せずに、サブビューから追加する画像をクリアするにはどうすればよいですか。どんな援助も大歓迎です。前もって感謝します。

コードは次のとおりです。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *) event { 
NSUInteger numTaps = [[touches anyObject] tapCount];

if (numTaps==2) {
    imageCounter.text =@"two taps registered";      

//__ remove images  
    UIView* subview;
    while ((subview = [[self.view subviews] lastObject]) != nil)
        [subview removeFromSuperview];

    return;

}else {

    UITouch *touch = [touches anyObject];
    CGPoint touchPoint = [touch locationInView:self.view];
    CGRect myImageRect = CGRectMake((touchPoint.x -40), (touchPoint.y -45), 80.0f, 90.0f); 
    UIImageView *myImage = [[UIImageView alloc] initWithFrame:myImageRect];

    [myImage setImage:[UIImage imageNamed:@"pg6_dog_button.png"]];
     myImage.opaque = YES; // explicitly opaque for performance


    [self.view addSubview:myImage];
    [myImage release];

    [imagesArray addObject:myImage];

    NSNumber *arrayCount =[self.view.subviews count];
    viewArrayCount.text =[NSString stringWithFormat:@"%d",arrayCount];
    imageCount=imageCount++;
    imageCounter.text =[NSString stringWithFormat:@"%d",imageCount];

}

}

4

2 に答える 2

29

必要なのは、追加されたUIImageViewオブジェクトを背景から区別する方法ですUIImageView。これを行うには2つの方法が考えられます。

アプローチ 1: 追加されたUIImageViewオブジェクトに特別なタグ値を割り当てます

UIViewオブジェクトには、tagそのビューを識別するために使用できる単純な整数値であるプロパティがあります。次のように、追加された各ビューのタグ値を 7 に設定できます。

myImage.tag = 7;

次に、追加されたビューを削除するには、すべてのサブビューをステップ実行して、タグ値が 7 のビューのみを削除します。

for (UIView *subview in [self.view subviews]) {
    if (subview.tag == 7) {
        [subview removeFromSuperview];
    }
}

アプローチ 2: 背景ビューを覚えておく

もう 1 つの方法は、バックグラウンド ビューへの参照を保持して、追加されたビューと区別できるようにすることです。背景IBOutlet用の を作成しUIImageView、Interface Builder で通常の方法で割り当てます。次に、サブビューを削除する前に、それが背景ビューでないことを確認してください。

for (UIView *subview in [self.view subviews]) {
    if (subview != self.backgroundImageView) {
        [subview removeFromSuperview];
    }
}
于 2010-11-09T18:04:23.197 に答える
0

コードの 1 つの機能行のみでアプローチ #1 のより迅速なコード:

self.view.subviews.filter({$0.tag == 7}).forEach({$0.removeFromSuperview()})
于 2016-10-03T13:58:13.430 に答える