我有一个非常简单的系统,我可以做到
-(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 ]
已无法访问。我该如何解决这个问题?
答案 0 :(得分:0)
为什么不将self.myView设置为nil,然后将其从视图层次结构中删除。这样你就可以做到
if (!self.myView) {
//add your view
}
答案 1 :(得分:0)
您的完成块不会触发,直到动画结束(即0.5秒)。 在动画时调用showMyView的远程情况下,您可以做两件事:
如果您检查alpha的值是否等于0.这将表示动画正在执行,因为动画的属性会中间更改(但您会看到随时间的变化)。
< / LI>有一个标志(布尔值)来表示删除状态
答案 2 :(得分:0)
实际上你的代码没有任何问题。问题是视图的alpha仍然设置为0.因此在显示视图时请尝试以下操作:
-(void) addMyViewToSuperView
{
[UIView animateWithDuration:0.5
animations:^{self.myView.alpha = 1.0;}
completion:^(BOOL finished){ [self.view addSubview: self.myView]; }];
}