1

このコードがアニメーション化されているサブビューを削除しない理由を誰か教えてもらえますか? ビューが積み重なっていて、2 回目にビューを閉じると、アニメーション化されず、タグ 99 を持つ subView のインスタンスが 2 つになりました。最初は解放されませんでした。

for (UIView *subview in [self.smallView subviews]) {
    NSLog(@"view:%@",subview);
    if (subview.tag == 99) {

        [UIView animateWithDuration:.5
                         animations:^{
                             subview.alpha = 0;
                         }
                         completion:^(BOOL finished){
                             subview.alpha = 0;
                             [subview removeFromSuperview];
                         }];
    }
}

サブビューを追加する方法は次のとおりです。viewVC は ViewController サブクラスであり、smallView はマップを追加する場所であり、すべてのビューのコンテナーです。

@property (nonatomic, retain) CustomViewController *viewVC;

viewVC = [self.storyboard instantiateViewControllerWithIdentifier:@"VIEWVC"];
viewVC.view.frame = CGRectMake(20, 20, 280, 371);

viewVC.view.layer.cornerRadius = 15;
viewVC.view.tag = 99;
viewVC.view.alpha = 0;
[self.smallView addSubview:viewVC.view];

[UIView animateWithDuration:.5
                 animations:^{
                     viewVC.view.alpha = 1;

                 }
                 completion:^(BOOL finished){
                     viewVC.view.alpha = 1;

                 }];
4

2 に答える 2

1

問題は、反復している配列からオブジェクトを削除していることであり、問​​題が発生する可能性があると思います。これを試して:

NSArray *subviews = [NSArray arrayWithArray:[self.smallView subviews]];
for (UIView *subview in subviews) {
    NSLog(@"view:%@",subview);
    if (subview.tag == 99) {

        [UIView animateWithDuration:.5
                         animations:^{
                             subview.alpha = 0;
                         }
                         completion:^(BOOL finished){
                             subview.alpha = 0;
                             [subview removeFromSuperview];
                         }];
    }
}

このようにして、反復している配列からオブジェクトを削除する必要がなくなります。

于 2012-08-24T14:21:58.023 に答える
0

subview.tag の値が 99 であることを確認している理由を明確にしていただけますか? if ステートメントのコードがまったく呼び出されない可能性はありますか? いくつかの NSLog 呼び出しを投入し、その if ステートメント内のコードが実行されているかどうかを確認します。そうである場合は、if ステートメント内で呼び出しているメソッドを調べて、それらがすべて問題ないことを確認する必要があります。

于 2012-08-24T14:25:46.853 に答える