- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 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/
我有一个 UITabBarController作为我的 rootViewController 并基于一个 Action ,我调用 presentViewController在 tabBarContro
我正在尝试组合一个简单的容器 View Controller ,它允许我从任何方向呈现 subview Controller (像标准导航 Controller 一样从右侧,也从顶部、底部和左侧放置。
我是一名优秀的程序员,十分优秀!