Ios 覆盖removeFromSuperview

Ios 覆盖removeFromSuperview,ios,xcode,uiview,Ios,Xcode,Uiview,我正在尝试为我创建的自定义视图覆盖removeFromSuperview。该视图旨在包含UIActivityIndicatorView,我成功地覆盖了initWithFrame方法,为其外观设置了动画。现在,我还想覆盖它的removeFromSuperview,在其中添加淡出动画,以便从视图控制器中,我可以简单地调用[self.loadingView removeFromSuperview];不幸的是,加载视图在没有动画的情况下被删除,可能是因为[super removeFromSupervie

我正在尝试为我创建的自定义视图覆盖removeFromSuperview。该视图旨在包含UIActivityIndicatorView,我成功地覆盖了initWithFrame方法,为其外观设置了动画。现在,我还想覆盖它的removeFromSuperview,在其中添加淡出动画,以便从视图控制器中,我可以简单地调用[self.loadingView removeFromSuperview];不幸的是,加载视图在没有动画的情况下被删除,可能是因为[super removeFromSuperview];我需要在重写时调用。这是我正在使用的代码,有没有办法修复它

-(void)removeFromSuperview
{
[super removeFromSuperview];
[UIView animateWithDuration:0.5
                 animations:^{self.alpha = 0.0;}
                 completion:^(BOOL finished){[self removeFromSuperview];}];
}
尝试将[super removeFromSuperview]放入动画的完成块中:

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

}

[从SuperView自动移除];这会产生一个无限循环吗???不,我认为一旦移除视图,它就不能正确地调用自己了?我的理解是,当重写一个方法时,首先要做的是调用[super methodName]。我错了吗?你的代码运行得很好我只是想知道我读到的关于重写的内容是否错误当你重写一个方法时,通常情况下你会在实现中的某个地方调用[super methodName]。它不必是第一行,也不必调用它。如果您在执行原始实现之前有事情要做,那么您应该先做自己的事情;在这种情况下,首先设置动画,然后在动画完成后调用原始实现。