子视图未被删除

时间:2012-08-24 14:08:23

标签: iphone uiview subview

有人可以告诉我为什么这段代码没有删除动画的子视图?视图正在堆叠,第二次我关闭视图,它不会动画,现在有两个带有标记99的子视图实例。它没有第一次发布。

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;

                 }];

2 个答案:

答案 0 :(得分: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];
                         }];
    }
}

这样,您就不再从正在迭代的数组中删除对象。

答案 1 :(得分:0)

您能否澄清为什么要检查subview.tag的值为99?是否根本没有调用if语句中的代码?抛出一些NSLog调用,看看你的if语句中的代码是否正在执行。如果是,那么你应该检查你在if语句中调用的方法,并确保它们都没问题。

相关问题