gpt4 book ai didi

ios - UIViewAnimationOptionBeginFromCurrentState 的意外行为

转载 作者:行者123 更新时间:2023-11-29 04:44:51 33 4
gpt4 key购买 nike

我正在尝试使用 UIViewAnimationOptionBeginFromCurrentState 实现多阶段动画,以允许用户随意取消动画。动画是在两种尺寸之间连续且循环地动画的 View 。当用户触摸 View 取消动画时,我希望 View 快速恢复到其原始的小尺寸,无论当时是增大还是缩小。

我通过两个单独的动画来实现多阶段方面,一个用于增大 View ,一个用于缩小 View 。每个例程都在其完成 block 中调用另一个例程,从而永远循环,除非已设置中止标志。

如果在增长 View 动画期间调用中止,我会得到预期的行为:动画快速并立即将 View 返回到其原始的小尺寸并停止。好!

但是,如果在收缩 View 动画周期期间调用 abort,则 View 会继续以相同的速度收缩(然后按预期停止),就好像从未调用过 UIViewAnimationOptionBeginFromCurrentState 选项一样。

代码有望使这一点更加清晰,并希望有人能够看到我看不到的东西。

- (void)stopAnimating {
abort = YES;

[UIView animateWithDuration:.2 // some small interval
delay:0
options:UIViewAnimationOptionBeginFromCurrentState
animations:^{ self.frame = minRect;}
completion:^(BOOL done){}
];
}

- (void)animateSmall {
[UIView animateWithDuration:4
delay:0
options:UIViewAnimationOptionAllowUserInteraction
animations:^{self.frame = minRect;}
completion:^(BOOL done){if (!abort)[self animateBig];}
];
}

- (void)animateBig {
[UIView animateWithDuration:4
delay:0
options:UIViewAnimationOptionAllowUserInteraction

animations:^{self.frame = maxRect;}
completion:^(BOOL done){if (!abort)[self animateSmall];}
];
}

最佳答案

这里只是一个猜测,因为你的代码看起来和我所做的完全一样。但我认为发生的情况是中止动画将相同的属性设置为与其中断的动画相同的值,并且这被视为等效且不需要更改(即使持续时间发生变化)。

对该理论的测试 - 以及问题的解决 - 是使振荡 minRect 的大小与稳定状态 minRect 的大小略有不同。

希望这能起作用。祝你好运。

关于ios - UIViewAnimationOptionBeginFromCurrentState 的意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9797594/

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