使用嵌套动画块的连续动画

时间:2011-04-25 19:44:45

标签: objective-c animation uiscrollview uiimageview objective-c-blocks

我正在寻找一种使用嵌套动画块实现连续动画的方法。

在UIScrollView中发生了一些复杂的事情,三个UIImageViews的大小(有很多图像,当我滚动它们时,我不断地在UIImageViews中交换图像)。

当滚动完成后,我想在(可见)中间UIImageView中切换出三次图像,然后再回到原始视图。我正在尝试这样做:

- (void) doAnimation {
    // get the animation frames, along with the current image
    NSString *swap1 = @"first.png";
    NSString *swap2 = @"second.png";
    UIImage *original = currentPage.image;

    UIViewAnimationOptions myOptions = UIViewAnimationOptionBeginFromCurrentState | UIViewAnimationOptionAllowUserInteraction;
    [UIView animateWithDuration:2.0 delay:2.0 options:myOptions
            animations:^{ [currentPage setImage:[UIImage imageNamed:swap1]]; }
            completion:^(BOOL finished) {
                [UIView animateWithDuration:2.0 delay:2.0 options:myOptions
                        animations:^{ [currentPage setImage:[UIImage imageNamed:swap2]]; }
                        completion:^(BOOL finished) {
                            [UIView animateWithDuration:2.0 delay:2.0 options:myOptions
                                    animations:^{ [currentPage setImage:[UIImage imageNamed:swap1]]; }
                                    completion:^(BOOL finished) {
                                        [currentPage setImage:original]; }]; }]; }];
}

当我跑步时,没有持续时间,没有延迟,这一切都立即发生,几乎太快,眼睛看不到。这可能是因为“currentPage”是UIImageView吗? (类似于this question?)

2 个答案:

答案 0 :(得分:1)

没有延迟,因为UIImageView.image不是一个可动画的属性。因此,UIView动画机器将没有动画设置,只会立即调用您的完成块。

您期望什么样的动画?您可以将CATransition对象附加到底层以获得简单的交叉淡入淡出,只需使用[imageView.layer addAnimation:[CATransition animation] forKey:nil]来获取具有默认值的交叉淡入淡出(您可以通过修改CATransition的属性来自定义时间将它附加到图层上)。要实现后续动画,您可以使用delegateCAAnimation超类的CATransition属性来了解它何时完成并触发第二个动画,或者您可以使用{ {1}}在用户定义的延迟后开始下一个动画步骤。关于定时,委托方法将更准确,但performSelector方法更容易编写。遗憾的是,CAAnimation不支持完成块。

答案 1 :(得分:0)

您从一个图像视图转换到另一个图像视图的另一种方法是使用“transitionFromView:toView:duration:options:completion中讨论的块动画函数Creating Animated Transitions Between Views"。您可以执行此操作而不是animateWithDuration来更改图像。” p>