iOS Dismiss 和 Present View Controller 自定义动画

标签 ios objective-c iphone ipad viewcontroller

我有一个 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/

相关文章:

ios - 无法将 iOS 项目与 il2cpp 和 Unity 链接

iOS:UITabBarItem 的自定义 View

ios - SwiftUI 图像组件在调整大小时缩小

ios - 保存到 iOS 托管对象上下文

ios - 如何使用 CryptoSwift 框架快速解密 AES 128

iphone - NSUserDefaults,取消选中 iPhone 上的凭据删除

iphone - Xcode 调用应用 didFinishLaunchingWithOptions

objective-c - 有没有办法显示不使用弱 self 的警告?

iphone - Objective C 中的 json 解析

php - 通过 PHP 联系页面从 iPhone 发送电子邮件