gpt4 book ai didi

iphone - UIAnimation 阻止奇怪的行为

转载 作者:行者123 更新时间:2023-12-01 18:26:50 25 4
gpt4 key购买 nike

大家好,感谢阅读,

我试图使用动画 block 制作一个简单的波浪动画:

[UIView animateWithDuration:0.6 delay:i*delay options:UIViewAnimationOptionBeginFromCurrentState | UIViewAnimationOptionAutoreverse animations:^{
tab.frame = CGRectMake(tab.frame.origin.x,
tab.frame.origin.y-WAVE_SIZE,
tab.frame.size.width,
tab.frame.size.height);
} completion:^(BOOL finished) {

tab.frame = CGRectMake(tab.frame.origin.x,
tab.frame.origin.y+WAVE_SIZE,
tab.frame.size.width,
tab.frame.size.height);
}];

问题是当动画结束时,当我试图将 View 返回到以前的状态时,一个奇怪的跳转会潜入(因为我正在使用重复效果)注意完成 block 。

如果有人遇到这样的问题,请分享,

再次感谢。

最佳答案

这与完成 block 触发时从 View 的模型值更新图层有关,这些值设置为动画的中间。我发现的唯一方法是让这种事情 100% 地工作,而无需将 API 拖放到 CAAnimation。是将动画链接成两半,而不是使用 UIViewAnimationOptionAutoreverse像这样:

[UIView animateWithDuration:0.3
delay:i*delay
options:UIViewAnimationOptionBeginFromCurrentState | UIViewAnimationCurveEaseIn
animations:^{
tab.frame = CGRectMake(tab.frame.origin.x,
tab.frame.origin.y-WAVE_SIZE,
tab.frame.size.width,
tab.frame.size.height);
}
completion:^(BOOL finished) {
[UIView animateWithDuration:0.3
delay:0.0
options: UIViewAnimationCurveEaseOut
animations:^{
tab.frame = CGRectMake(tab.frame.origin.x,
tab.frame.origin.y+WAVE_SIZE,
tab.frame.size.width,
tab.frame.size.height);
}
completion:NULL];

}];

这确保了在每个动画结束时, View 的模型值(即其当前位置)与动画的最终帧相同。这意味着您不会得到那种抖动效果。

这使得 UIViewAnimationOptionAutoreverse似乎有点无意义。如果它可以使 View 的模型值与动画的最后一帧不同,为什么还要使用它?当与 UIViewAnimationOptionRepeat 结合使用时它产生了一个相当令人愉悦的效果,它来回移动直到被移除。

关于iphone - UIAnimation 阻止奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12885840/

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