iOS:如何在动画后检查视图是否具有superView

时间:2014-11-17 22:43:19

标签: ios iphone uiview

我有一个非常简单的系统,我可以做到

-(void)showMyView
{
    if (![self.myView superview]) {
        [self.view addSubview: self.myView ];
    }else{
        [self.myView removeFromSuperview];
    }
}

但我需要动画,所以我将代码更改为

-(void)showMyView
{
    if (![self.myView superview]) {
        [self.view addSubview: self.myView ];
    }else{
        [self removeMyViewFromSuperView];
    }
}

-(void) removeMyViewFromSuperView
{
    [UIView animateWithDuration:0.5
                     animations:^{self.myView.alpha = 0.0;}
                     completion:^(BOOL finished){ [self.myView removeFromSuperview]; }];
}

目前动画效果正常,但呼叫[self.view addSubview: self.myView ]已无法访问。我该如何解决这个问题?

3 个答案:

答案 0 :(得分:0)

为什么不将self.myView设置为nil,然后将其从视图层次结构中删除。这样你就可以做到

if (!self.myView) {
  //add your view
}

答案 1 :(得分:0)

您的完成块不会触发,直到动画结束(即0.5秒)。 在动画时调用showMyView的远程情况下,您可以做两件事:

  1. 如果您检查alpha的值是否等于0.这将表示动画正在执行,因为动画的属性会中间更改(但您会看到随时间的变化)。

    < / LI>
  2. 有一个标志(布尔值)来表示删除状态

答案 2 :(得分:0)

实际上你的代码没有任何问题。问题是视图的alpha仍然设置为0.因此在显示视图时请尝试以下操作:

-(void) addMyViewToSuperView
{
    [UIView animateWithDuration:0.5
                     animations:^{self.myView.alpha = 1.0;}
                     completion:^(BOOL finished){ [self.view addSubview: self.myView]; }];
}
相关问题