Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 未删除子视图_Iphone_Uiview_Subview - Fatal编程技术网

Iphone 未删除子视图

Iphone 未删除子视图,iphone,uiview,subview,Iphone,Uiview,Subview,有人能告诉我为什么这段代码没有删除正在设置动画的子视图吗?视图正在堆积,第二次我关闭视图时,它将不会设置动画,现在有两个带有标记99的子视图实例。它不是第一次发布的 for (UIView *subview in [self.smallView subviews]) { NSLog(@"view:%@",subview); if (subview.tag == 99) { [UIView animateWithDuration:.5

有人能告诉我为什么这段代码没有删除正在设置动画的子视图吗?视图正在堆积,第二次我关闭视图时,它将不会设置动画,现在有两个带有标记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;

                 }];

我认为问题可能是您正在从正在迭代的数组中删除一个对象,这将导致问题。试试这个:

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];
                         }];
    }
}

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

我认为问题可能是您正在从正在迭代的数组中删除对象,这将导致问题。试试这个:

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];
                         }];
    }
}

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

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

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

你能解释一下为什么你要检查subview.tag的值是99吗?我很确定你正在用这段代码做你想做的事情。您能否构建一个迭代子视图的小方法,对tag==99的子视图进行计数并打印计数?在循环外调用它,然后在完成块中调用它。我的猜测是,在移除SuperView之后,计数将是正确的。我认为您正在其他地方添加视图。在添加视图并调出alpha后,您不需要该完成块,但这不是问题所在。请您澄清为什么要检查subview.tag的值为99?我很确定您正在使用此代码执行您想要执行的操作。您能否构建一个迭代子视图的小方法,对tag==99的子视图进行计数并打印计数?在循环外调用它,然后在完成块中调用它。我的猜测是,在移除SuperView之后,计数将是正确的。我认为您正在其他地方添加视图。在添加视图并调出alpha后,您不需要完成块,但这不是问题所在。@sch,您说得对,我偏离了目标。我已经根据你的捕获修改了我的代码。Eric,请参考sch的答案。你确定if语句被调用了吗?在这里,我正处于某件事情的中间,所以我会在它完成后再回到你身边(这将是几个小时)。如果被调用并且上面的代码产生了堆叠的视图相同的结果,问题是调用上面的代码的通知被添加了两次。因此视图没有堆积,但是每次我添加新的子视图时都会调用要删除的代码。谢谢@sch,你说得对,我偏离目标了。我已经根据你的捕获修改了我的代码。Eric,请参考sch的答案。你确定if语句被调用了吗?在这里,我正处于某件事情的中间,所以我会在它完成后再回到你身边(这将是几个小时)。如果被调用并且上面的代码产生了堆叠的视图相同的结果,问题是调用上面的代码的通知被添加了两次。因此视图没有堆积,但是每次我添加新的子视图时都会调用要删除的代码。谢谢