switch two view controller's view in a cube an

2020-05-28 11:40发布

问题:

the code below implement the switch between two view in a cube animation .

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];

but, if the view don't belong to self.navigationController, how to do switch in cube animation between two view controller, and then how to scale the current view controller's view in the same time? thanks very much

回答1:

This worked for me:

-(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];
}