gpt4 book ai didi

ios - UITabBarController 和使用 transitionFormViewController :

转载 作者:行者123 更新时间:2023-11-29 13:05:47 25 4
gpt4 key购买 nike

我有一个 UITabBarController作为我的 rootViewController 并基于一个 Action ,我调用 presentViewController在 tabBarController 上工作正常。呈现的 Controller 是 UINavigationController

基于我想通过使用 transitionFromViewController:toViewController:duration:options:animations:completion: 从当前呈现的 UINavigationController 转换到不同的 UINavigationController 的操作但抛出错误:

Parent view controller is using legacy containment in call to -[UIViewController transitionFromViewController:toViewController:duration:options:animations:completion:]

人们谈论在 UINavigationController 上调用它时会得到它,但这是针对 UITabBarController 的,我希望它有所不同。

最终,我想从当前呈现的 UINavigationController 过渡到具有交叉融合的新 UINavigationController。我可以忽略第一个并展示第二个,但它是从底部开始的幻灯片。这可能吗?

最佳答案

当过渡不能按您想要的方式工作时,对我总是有效的一种技术是简单地使用一些烟雾和镜子。这是一项通常非常好的技术,需要了解并掌握在您的工具带中。

这是我的食谱:

A) 你截取当前屏幕的屏幕截图:(借自 How Do I Take a Screen Shot of a UIView? )

UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow];
CGRect rect = [keyWindow bounds];
UIGraphicsBeginImageContextWithOptions(rect.size,YES,0.0f);
CGContextRef context = UIGraphicsGetCurrentContext();
[keyWindow.layer renderInContext:context];
UIImage *capturedScreen = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

B) 使用您的屏幕截图创建一个 UIImageView 并将其添加到您的新 viewController

UIImageView *fakeScreen = [UIImageView alloc] initWithImage:captureScreen];
//accessing .view isn't best practice, consider using a dedicated property inside your UIViewController subclass, here just for the sake of explanation
[secondViewController.view addSubview:fakeScreen];

C) 关闭当前的 View Controller ,确保不对其进行动画处理,在您的情况下为 UINavigationController[navigationController dismissViewControllerAnimated:NO completion:nil];

D) 呈现您的新 View Controller ,也不要为其设置动画。 (secondViewController) 然后淡出 imageView。

[self.tabBarController presentViewController:secondViewController animated:NO completion:NO];
[UIView animateWithDuration:0.08 animations:^{
fakeScreen.alpha = 0;
} completion:
^{[
fakeScreen removeFromSuperview]; ];

这会给你一个正常的淡入淡出。如果你想做一个真正的 crossfade,你需要对你的第二个 viewController 的内容有点创意:你需要一个有两个 subview 的 Root View :一个 contentview(用于正在淡出的内容in) 和 fakeView(将会淡出)。

关于ios - UITabBarController 和使用 transitionFormViewController :,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18692397/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com