从超级视图中删除在动画完成处理程序中不起作用

Remove from superview not working in animation completion handler

我有一个添加了多个 UILabel 的 UIView。我只是用动画将它们全部移动到屏幕中央,然后尝试在动画完成处理程序中将它们从它们的超级视图中删除。

for (label in [self.view subviews])
{
    if([label isKindOfClass:[UILabel class]])
    {
        CGRect frame = CGRectMake(self.view.frame.size.width/2, self.view.frame.size.height/2, label.frame.size.width, label.frame.size.height);
        [UIView animateWithDuration:2.0
                              delay:0.0
                            options: UIViewAnimationOptionCurveEaseInOut
                         animations:^{
                             [self->label setFrame:frame];
                         }
                         completion:^(BOOL finished){
                             dispatch_async(dispatch_get_main_queue(),^{
                                 [self->label removeFromSuperview];
                             });
                         }
         ];
    }
}

我遇到的问题是在动画结束时 UILabel 仍然存在。如果我将 removeFromSuperView 调用放在动画块之外,那么它会起作用,但当然它们会在动画有机会完成之前被删除。

您已将 label 作为块中 for-in 和 self->label 中的变量。显然,您并没有按照您认为的标签进行操作。