iOS Dismiss和Present视图控制器自定义动画

时间:2014-11-11 05:43:38

标签: ios objective-c iphone ipad viewcontroller

我有一个视图控制器,我正在使用以下目标c代码:

CATransition *animation=[CATransition animation];
animation.delegate=self;
animation.duration=0.3;
animation.type=kCATransitionMoveIn;
animation.subtype=kCATransitionFromRight;

[self presentViewController:reader animated:NO completion:nil];
[reader.view.layer addAnimation:animation forKey:@"animation"];

并在委托方法中删除类似的代码

CATransition *animation=[CATransition animation];
animation.delegate=self;
animation.duration=0.3;
animation.type=kCATransitionMoveIn;
animation.subtype=kCATransitionFromLeft;

[self dismissViewControllerAnimated:NO completion:nil];
[self.view.layer addAnimation:animation forKey:@"animation"];

然而,有一个问题:与使用导航控制器不同,您可以在其中看到一个视图滑动到其他视图;在这里,旧视图立即消失,因此新视图会移动 在空白的视图上。

如何解决此问题?我需要这个代码在IOS 6,7和8中工作,并希望它看起来像在导航控制器内的视图之间来回看时的水平动画。

编辑: 我接受的解决方案有一个iOS 6的错误,如果我能找到解决它的解决方案,我将编辑这篇文章。

编辑2: 找到了。看来,因为我提出了一个zBar视图控制器,我需要使用这个代码

zbarController.wantsFullScreenLayout=NO;

设置cameraOverlayView后。

1 个答案:

答案 0 :(得分:11)

使用自定义动画呈现视图控制器:

CATransition* transition = [CATransition animation];
transition.duration = 0.3;
transition.type = kCATransitionMoveIn;
transition.subtype = kCATransitionFromRight;
[self.navigationController.view.layer addAnimation:transition forKey:kCATransition];
[self.navigationController pushViewController:reader animated:NO];

使用自定义动画解除视图控制器:

CATransition* transition = [CATransition animation];
transition.duration = 0.3;
transition.type = kCATransitionReveal;
transition.subtype = kCATransitionFromLeft;
[self.navigationController.view.layer addAnimation:transition forKey:kCATransition];    
[self.navigationController popViewControllerAnimated:NO];