みなさん、こんにちは。
私は初心者で、数日間これを乗り越えようとしています。
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];
}
}
必要なのは、追加された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:背景ビューを覚えておいてください
別のアプローチは、追加されたビューと区別できるように、背景ビューへの参照を保持することです。背景IBOutlet
用にUIImageView
を作成し、InterfaceBuilderで通常の方法で割り当てます。次に、サブビューを削除する前に、それが背景ビューではないことを確認してください。
for (UIView *subview in [self.view subviews]) {
if (subview != self.backgroundImageView) {
[subview removeFromSuperview];
}
}
たった1行のコードでアプローチ#1のより迅速なコード:
self.view.subviews.filter({$0.tag == 7}).forEach({$0.removeFromSuperview()})