0

我想为pushViewController使用一系列图像的动画创建自定义动画。

我已经做到了这一点,currentViewController上面覆盖了我想要的图像,但我不知道我是否可以nextViewController在尝试反转动画图像的顺序时显示。

到目前为止,我有以下

- (IBAction)nextAction:(id)sender {

    UIImage* img1 = [UIImage imageNamed:@"image-1.png"]; 
    UIImage* img2 = [UIImage imageNamed:@"image-2.png"];
    UIImage* img3 = [UIImage imageNamed:@"image-3.png"];
    UIImage* img4 = [UIImage imageNamed:@"image-4.png"];
    UIImage* img5 = [UIImage imageNamed:@"image-5.png"];

    NSArray *animationImages = [NSArray arrayWithObjects:img1,img2,img3,img4,img5,nil];

    CALayer *myLayer = [CALayer layer];
    myLayer.bounds = CGRectMake(0.0, 0.0, 320.0, 480.0);
    myLayer.position =  self.view.center; //CGPointMake(0.0 ,0.0);
    CAKeyframeAnimation *animationSequence = [CAKeyframeAnimation animationWithKeyPath: @"contents"];
    animationSequence.calculationMode = kCAAnimationLinear;
    animationSequence.autoreverses = NO;
    animationSequence.duration = 0.4;
    animationSequence.delegate = self;
    animationSequence.repeatCount = 1; //HUGE_VALF;
    NSMutableArray *animationSequenceArray = [[NSMutableArray alloc] init];
    for (UIImage *image in animationImages) 
    {
        [animationSequenceArray addObject:(id)image.CGImage];
    }
    animationSequence.values = animationSequenceArray;
    [myLayer addAnimation:animationSequence forKey:@"contents"];    
    [self.view.layer addSublayer:myLayer];

}


- (void)animationDidStop:(CAAnimation*)animation finished:(BOOL)finished {

    NextViewController *nextViewController;
    nextViewController = [[NextViewController alloc] initWithNibName:@"NextViewController" bundle:nil];
    nextViewController.title = @"next";

    [self.navigationController pushViewController:nextViewController animated:NO];
    [nextViewController release];

}

IBAction nextAction当用户按下一个按钮并且图像在当前视图之上动画化时执行。

我想要实现的是在图像位于顶部之后,推动nextViewController图像下方并反转动画,以便nextViewController显示出来。

我希望这是有道理的。这就像有一张照片,将一些卡片放在照片上,然后取出卡片,露出另一张照片。

4

1 回答 1

0

不要将该动画层添加到当前的 viewController 上,而是将该层直接添加到当前的 keyWindow 上。这将隐藏您当前的 viewController。

[[[UIApplication sharedApplication] keyWindow] layer addSublayer:myLayer];

一旦你的动画的前半部分完成(或者换句话说,一旦完成了正序的完整动画),移除动画层。用新的 viewController 替换 viewController 并再次将第二个动画层添加到 keyWindow - 现在开始动画的后半部分。完成后,从 keyWindow 中删除动画层。

根据应用程序的结构,您还可以使用有效驻留在附加视图控制器下方的 rootViewController 作为动画层的超级视图/超级层。

[[[[UIApplication sharedApplication] rootViewController] view] layer addSublayer:myLayer];
于 2012-05-19T08:24:11.860 回答