作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有覆盖整个屏幕的 vc1.view,我希望能够调暗 vc1.view,并让 vc2.view 放大到整个屏幕。
我的应用程序中没有任何导航 Controller ,那么实现我的目标的最佳做法是什么?我想到的解决方案是:
我不喜欢将不同 vc 的 View 添加到公共(public)容器 View 中的想法。有什么建议么?提前致谢。
最佳答案
您可以使用 transitionFromView:toView:... 而无需将新 View 添加到公共(public)容器,因为该转换方法负责添加 View 。以下对我有用。代码位于 View Controller 中,其 View 是“来自 View ”。我在这里使用交叉淡入淡出,但您可以将其更改为任何其他可用方法:
-(void)switchViews:(id)sender {
UIWindow *win = self.view.window;
YellowController *yellow = [self.storyboard instantiateViewControllerWithIdentifier:@"Yellow"];
yellow.view.frame = self.view.frame;
[UIView transitionFromView:self.view toView:yellow.view duration:2 options:UIViewAnimationOptionTransitionCrossDissolve completion:^(BOOL finished) {
win.rootViewController = yellow;
}];
}
但是,要进行自定义转换,您必须将新 View 添加为“从 View ”所在的任何 View 的 subview (我认为)。在这个例子中,这是窗口的 View 。此代码从旧 View 的中心生成新 View ,而旧 View 则淡出。在转换结束时, View Controller 切换到拥有新 View 的 View Controller (在本例中为黄色)
编辑后:我将此方法更改为使用 CGAffineTransform(感谢 jrturton 在回答我的问题时提出的建议):
-(void)switchViews3:(id)sender {
UIWindow *win = self.view.window;
YellowController *yellow = [self.storyboard instantiateViewControllerWithIdentifier:@"Yellow"];
yellow.view.frame = self.view.frame;
yellow.view.transform = CGAffineTransformMakeScale(.1, .1);
[win addSubview:yellow.view];
[UIView animateWithDuration:.6 animations:^{
yellow.view.transform = CGAffineTransformIdentity;
self.view.alpha = 0;
}
completion:^(BOOL finished) {
[self.view removeFromSuperview];
win.rootViewController = yellow;
}];
关于ios - 如何在没有任何导航 Controller 的情况下从 vc1.view 过渡到 iOS 中的 vc2.view?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13887861/
我是一名优秀的程序员,十分优秀!