2012-05-19 9 views
0

Я хочу создать пользовательскую анимацию для анимации pushViewController с использованием последовательности изображений.Пользовательская анимация для 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]; 

} 

IBActionnextAction выполняется, когда пользователь нажимает на кнопку, и изображения получить анимированные поверх текущего вида.

Что я хочу достичь, после того, как изображения находятся сверху, нажмите nextViewController под изображениями и отмените анимацию, чтобы выявить nextViewController.

Надеюсь, это имеет смысл. Это похоже на фотографию, поместив на карту несколько карт, а затем удалив карты, открывая другую фотографию.

Тео

ответ

0

Вместо того, добавив, что анимационный слой на текущий ViewController, добавить этот слой непосредственно на текущем keyWindow. Это скроет ваш текущий viewController.

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

После первой половины анимации делается (или, другими словами, после того, как полная анимация в прямом порядке делается), удалить анимацию слоя. замените viewController этим новым и добавьте второй слой анимации снова в keyWindow - теперь запустите вторую половину своей анимации. Как только это будет сделано, удалите слой анимации из keyWindow.

В зависимости от структуры вашего приложения вы также можете использовать rootViewController, который фактически находится под дополнительными viewControllers в качестве супервизора/суперслоя вашего слоя анимации.

[[[[UIApplication sharedApplication] rootViewController] view] layer addSublayer:myLayer]; 
+0

Я пытаюсь использовать [[[UIApplication sharedApplication] keyWindow] .layer addSublayer: myLayer]; но есть ли способ, когда анимация на полпути, чтобы нажать nextViewController; – teo

+0

Я предполагал, что первая половина всей анимации презентации на самом деле была полной анимацией, как указано выше. – Till

Смежные вопросы