gpt4 book ai didi

ios - 关键帧动画关键时间

转载 作者:可可西里 更新时间:2023-11-01 03:30:03 25 4
gpt4 key购买 nike

我刚刚创建了一个像这样的关键帧动画:

[UIView animateKeyframesWithDuration:10 delay:0 options:0 animations:^{
[UIView addKeyframeWithRelativeStartTime:0 relativeDuration:.1 animations:^{
view.alpha = 0;
}];
} completion:nil];

这是一个被创建的CAKeyframeAnimation:

(lldb) po [self.layer animationForKey:@"opacity"]
<CAKeyframeAnimation:0x10a6364b0; keyTimes = (
0,
"0.1",
1
); values = (
1,
0,
0
); calculationMode = linear; delegate = <UIViewKeyframeAnimationState: 0x10a6358d0>; fillMode = both; timingFunction = easeInEaseOut; duration = 10; keyPath = opacity>

问题:

整个动画应该需要 10 秒,不透明度动画需要 10 * 0.1 = 1 秒,对吧?当我查看动画时,变化的动画时间超过 1 秒。

为什么?

最佳答案

原因是动画的计时函数不是线性的。

“Time and space are relative concepts.” – Theory of relativity

图层和动画使用分层计时系统,其中每个对象都有自己的本地时间,该时间取决于其父项和自己的计时参数。

例如,动画有一个计时函数来定义它们的节奏。 UIKit 创建的动画的默认计时函数是 ease-in ease-out 计时函数,它定义了一个缓慢开始的计时,在持续时间的中间加速,然后在完成之前再次减速。它使流畅的动画不会突然开始或停止。然而,它也会调节关键帧动画的关键时间,这在您需要精确计时时会很烦​​人。

您可以通过将 UIViewAnimationOptionCurveLinear 选项传递给 animateKeyframesWithDuration:delay:options:animations:completion: 方法来禁用缓入缓出计时。我不确定它是否有意为您需要将值从 UIViewAnimationOptions 转换为 UIViewKeyframeAnimationOptions 并且文档对此没有说明。也许更好(但更冗长)的方法是将关键帧动画 block 嵌入标准动画 block 中,如下所示:

[UIView animateWithDuration:10 delay:0 options:UIViewAnimationOptionCurveLinear animations:^{
[UIView animateKeyframesWithDuration:0 /*inherited*/ delay:0 options:0 animations:^{
[UIView addKeyframeWithRelativeStartTime:0 relativeDuration:.1 animations:^{
view.alpha = 0;
}];
} completion:nil];
} completion:nil];

关于ios - 关键帧动画关键时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20521214/

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