2010-12-30 26 views
7

el siguiente código implementa el cambio entre dos vistas en una animación de cubo.cambiar la vista de dos vista del controlador en una animación de cubo

UIViewController* viewCtrl = [[UIViewController alloc] init:book]; 

CATransition *transition = [CATransition animation]; 
transition.duration = 1; 
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; 
transition.type = @"cube"; 
transition.subtype = kCATransitionFromLeft; 
transition.delegate = self; 
[self.navigationController.view.layer addAnimation:transition forKey:nil]; 
self.navigationController.navigationBarHidden = NO; 
[self.navigationController pushViewController:viewCtrl animated:YES];  

[viewCtrl release]; 

pero, si la vista no pertenecen a self.navigationController, cómo hacer interruptor de animación del cubo entre dos controlador de vista, y luego la manera de ampliar la visión del controlador de vista actual en el mismo tiempo? muchas gracias

Respuesta

8

Esto funcionó para mí:

-(IBAction)animate:(id)sender { 
    NSLog(@"animate"); 

    CATransition *transition = [CATransition animation]; 
    transition.delegate = self; 
    transition.duration = 0.8; 
    transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; 
    NSString *types[4] = {@"cube", @"rippleEffect", @"cube", @"alignedCube"}; 
    NSString *subtypes[4] = {kCATransitionFromLeft, kCATransitionFromRight, kCATransitionFromTop, kCATransitionFromRight}; 

    transition.type = types[0]; 
    transition.subtype = subtypes[1]; 

    [self.view.layer addAnimation:transition forKey:nil]; 

    SecondView *_secondViewController = [[SecondView alloc]initWithNibName:@"secondView" bundle:nil]; 
    self.secondViewController = _secondViewController; 
    _secondViewController = nil; 

    [[[self view] layer] addAnimation: transition forKey: nil]; 
    [[self view] addSubview: [self.secondViewController view]]; 
} 

-(void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag{ 
    [self.view release]; 
} 
+5

Tenga en cuenta que todos los 'tipos' anteriores son indocumentados y si se descubren usarlos su aplicación puede ser que consiga tirado. Además, podrían desaparecer (o renombrarse) en cualquier versión de punto. –

Cuestiones relacionadas