从超级视图中删除在动画完成处理程序中不起作用
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
中的变量。显然,您并没有按照您认为的标签进行操作。
我有一个添加了多个 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
中的变量。显然,您并没有按照您认为的标签进行操作。