如何解决UIView动画循环播放
| 动画不能循环播放是否有原因?我知道您可以执行以下命令:[UIView setAnimationRepeatCount: someNumber];
直到我将实际的不同pdf加载之前,它都运行良好。因此,以前只有一个pdf总是会被加载,所以当我说动画5次以转到最后一个文档时,动画看起来是正确的。但是现在我有5个不同的pdf,它将使用CurlUp翻页5次,但是它将继续在列表中显示第一个pdf,然后最后加载正确的pdf。所以我想我可以循环执行,跟踪数组中的位置,并在我翻动页面时在每个位置加载每个pdf,这样可以使用户感觉到它们在pdf堆栈中的位置。但是,当我将核心动画代码放入循环中时,它基本上只显示一次动画,但确实到达了正确的文档。
解决方法
从我对您正在做的事情的理解来看,听起来您实际上正在一次运行所有5个动画。在for循环中执行动画块时,runloop不会在每个循环之间进行迭代,并且仅运行最后一个动画。
您需要使用的是使用完成调用并将它们“链接”在一起。因此,您运行第一个动画,然后在该完成调用上运行第二个动画,然后在该调用上运行第三个动画,依此类推。编写代码的时间更长,但这可以工作。
在这种情况下使用块会更容易,那么所有的动画代码都将放在一个位置,而不必将每个动画代码全部分散到一堆方法中。您只需要嵌套这些块,就可以在第一个动画的完成块中生成第二个,然后生成第三个,依此类推。
这是使用blocks方法的示例。有点难以理解,但是您会明白的。您也许可以创建一个动画块并在每种完成方法中重用它,但是我不知道这样做的所有要点,并且当您初次尝试理解它时,这更容易阅读。
请注意,我实际上并没有尝试或测试过它,但是我认为它会做您想要的。
[UIView animateWithDuration:1.0 animations:^(void) {
// Animation changes go here
// blah.alpha = 1.0
// blah.position = CGPointMake
// etc
} completion:^(BOOL finished) {
// Start next animation which will run with this one finishes
[UIView animateWithDuration:1.0 animations:^(void) {
// Animation changes go here
// blah.alpha = 1.0
// blah.position = CGPointMake
// etc
} completion:^(BOOL finished) {
// Start next animation which will run with this one finishes
[UIView animateWithDuration:1.0 animations:^(void) {
// Animation changes go here
// blah.alpha = 1.0
// blah.position = CGPointMake
// etc
} completion:^(BOOL finished) {
// Start next animation which will run with this one finishes
[UIView animateWithDuration:1.0 animations:^(void) {
// Animation changes go here
// blah.alpha = 1.0
// blah.position = CGPointMake
// etc
} completion:nil];
}];
}];
}];
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。