我有一个 View Controller ,我用以下 Objective-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"];
并在委托(delegate)方法中使用类似的代码解散
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"];
但是有一个问题:与使用导航 Controller 不同,您会看到一个 View 滑到另一个 View 上;这里旧 View 立即消失所以新 View 移动 到空白 View 上。
如何解决这个问题?我需要此代码在 IOS 6,7 和 8 中工作,并希望它看起来像您在导航 Controller 内的 View 之间来回切换时看到的水平动画。
编辑: 我接受的解决方案在 iOS 6 中存在错误,如果我能找到修复它的解决方案,我将编辑这篇文章。
编辑 2: 找到了。看来,因为我要展示一个 zBar View Controller ,所以我需要使用这段代码
zbarController.wantsFullScreenLayout=NO;
在我设置 cameraOverlayView 之后。
最佳答案
使用自定义动画呈现 View Controller :
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];
使用自定义动画关闭 View Controller :
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];
关于iOS Dismiss 和 Present View Controller 自定义动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26858356/