Cry*_*tal 1 iphone core-animation objective-c
动画在循环中不起作用的原因是什么?我知道你可以做命令:
[UIView setAnimationRepeatCount: someNumber];
Run Code Online (Sandbox Code Playgroud)
哪个工作正常,直到我把实际不同的pdf加载.所以之前,只有一个pdf总是被加载,当我做动画说5次去最后一个文档时,动画看起来是正确的.但是现在我有5个不同的pdf,它将使用CurlUp将页面翻转5次,但它将继续显示列表中的第1个pdf,然后在最后加载正确的pdf.所以我想我可以在循环中完成它,跟踪数组中的位置,并在我翻阅页面时在每个位置加载每个pdf,这样用户就可以感觉到它们在pdf堆栈中的位置.但是当我将核心动画代码放在一个循环中时,它基本上只显示动画一次,但确实可以获得正确的文档.
根据我对你正在做的事情的理解,听起来你实际上是在同时运行所有5个动画.在for循环中执行动画块时,runloop不会在每个循环之间进行迭代,只会运行最后一个动画.
您需要使用的是使用完成调用并将它们"链接"在一起.所以你运行第一个动画,然后在完成调用你运行第二个,然后在那个调用第三个,等等.编码更冗长,但这将工作.
在这种情况下使用块会更容易,然后所有的动画代码将放在一个地方,而不是必须将它们分散到每个动画的一堆方法中.您只需嵌套块,在第一个动画的完成块中,您将生成第二个,然后是第三个,等等.
这是使用块方法的示例.这有点难以阅读,但你会明白这一点.您可能能够创建单个动画块并在每个完成方法中重复使用它,但我不知道这样做的所有捕获,当您第一次尝试理解它时,这更容易阅读.
请注意,我实际上没有尝试过这个或测试它,但我认为它会做你想要的.
[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];
}];
}];
}];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3464 次 |
| 最近记录: |