gpt4 book ai didi

ios - 更改 UILabel 的文本使其在使用 UIViewKeyframeAnimations 时重新出现

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:17:04 24 4
gpt4 key购买 nike

我想在 UILabel 上执行一系列动画,所以我查找了在 iOS7 中添加的 UIViewKeyframeAnimations

我想做的简化版本是:

  1. 淡出 UILabel,持续时间为 0.5 秒
  2. 等一秒
  3. 用新文本淡入 UILabel,持续时间为 0.5 秒

    NSTimeInterval duration = 2;
    [UIView animateKeyframesWithDuration:duration delay:0 options:UIViewKeyframeAnimationOptionAllowUserInteraction | UIViewAnimationOptionOverrideInheritedOptions animations:^{
    [UIView addKeyframeWithRelativeStartTime:0 relativeDuration:0.5/duration animations:^{
    self.label.alpha = 0;
    }];

    [UIView addKeyframeWithRelativeStartTime:1.5/duration relativeDuration:0.5/duration animations:^{
    self.label.text = [@(arc4random_uniform(4000)) stringValue];
    self.label.alpha = 1;
    }];
    } completion:nil];

结果是标签文本淡出并重新出现新文本,然后再次淡出并再次淡入。

结果视频:Animation Failure

干杯莫腾

最佳答案

您声明:“结果是标签文本淡出并重新出现新文本,然后再次淡出并再次淡入。”。然而,我在电影中看到的是,alpha 过渡按预期工作,淡出和淡入。您期望的行为的唯一异常(exception)是,文本更改在动画开始时就已经应用,而不是在动画第二个关键帧的开始。

重要的是要了解 addKeyframeWithRelativeStartTime block 中的代码会在调用 animateKeyframesWithDuration 后立即执行。任何可动画的变化(帧、alpha 等)都将被动画化。同样,任何不是自动动画 View 属性的内容(例如标签的文本更改)都将立即可见。

为了帮助说明这一点,请尝试在所有动画 block (包括 animateKeyframesWithDuration 和 addKeyframeWithRelativeStartTime)的开头放置一个 NSLog 语句,并在完成 block 中放置一个。您会看到每个 NSLog 除了完成 block 中的那个都有完全相同的日志时间。

正是出于这个原因,下面的代码起作用,因为完整 block 的执行被推迟到第一个动画完成时:

[UIView animateWithDuration:1 animations:^{
self.label.alpha = 0;
} completion:^(BOOL finished) {
self.label.text = [@(arc4random_uniform(4000)) stringValue];
[UIView animateWithDuration:1 animations:^{
self.label.alpha = 1;
}];
}];

关于ios - 更改 UILabel 的文本使其在使用 UIViewKeyframeAnimations 时重新出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26402062/

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