gpt4 book ai didi

objective-c - 取消 UIView 动画 block

转载 作者:搜寻专家 更新时间:2023-10-30 20:00:55 26 4
gpt4 key购买 nike

下面的代码显示了一个标签动画,其中包含用户的状态消息。如果事件发生,标签会显示提示并通过 uiview 动画 block 慢慢消失。

- (void)showStatusOnLabelWithString:(NSString *)statusMessage
{
// [self.view.layer removeAllAnimations]; // not working
[labelStatus.layer removeAllAnimations]; // not working, too

[labelStatus setText:statusMessage];
[labelStatus setHidden:NO];
[labelStatus setAlpha:1.0];

[UIView animateWithDuration:5.0 animations:^
{
[labelStatus setAlpha:0.0];

} completion:^(BOOL finished)
{
[labelStatus setHidden:YES];
[labelStatus setAlpha:1.0];
}];
}

如果在第一个事件之后的 5 秒内有另一个事件,标签应该再次设置动画,所以我使用 [self.view.layer removeAllAnimations] 删除了之前的动画(这就是我的想法)。但是标签完全消失了,接下来的 5 秒标签又看不见了。

如果我(或用户)等待 5 秒,一切正常。

为什么这不起作用?

亲切的问候,$h@rky

最佳答案

改变这个:

completion:^(BOOL finished) 
{
[labelStatus setHidden:YES];
[labelStatus setAlpha:1.0];
}];

为此:

completion:^(BOOL finished) 
{
if (finished) {
[labelStatus setHidden:YES];
[labelStatus setAlpha:1.0];
}
}];

原因是当您移除层的动画时您到达了这个完成 block ,但是 finished 将是 false 因为您中断了它。另外,这里的顺序很重要。也许您期望 removeAllAnimations 立即调用完成 block ,但它会在您的 showStatusOnLabelWithString: 方法完成后调用,所以您正在调用 setHidden:NO 紧随其后的是 setHidden:YES

关于objective-c - 取消 UIView 动画 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9030685/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com