Iphone 重新创建UIViewcontroller时';s视图,如何强制旋转?

Iphone 重新创建UIViewcontroller时';s视图,如何强制旋转?,iphone,ios,cocoa-touch,Iphone,Ios,Cocoa Touch,我有一个正在使用的视图控制器(出于内存限制的原因),因此,我没有推送一个新的UIViewController,而是设置一些参数,然后强制这个VC重新加载它的视图。代码如下(由通知回调触发): 一切正常,除了该应用程序仅为横向应用,并且新加载的视图作为纵向视图添加到窗口之外 我尝试将旧视图的变换强制到新视图上,但奇怪的是,它给出了旋转,但偏移了愚蠢的平移 有没有办法告诉UIViewController“现在进行旋转” 编辑: 我添加了一个相当愚蠢的hack: // restore para

我有一个正在使用的视图控制器(出于内存限制的原因),因此,我没有推送一个新的UIViewController,而是设置一些参数,然后强制这个VC重新加载它的视图。代码如下(由通知回调触发):

一切正常除了该应用程序仅为横向应用,并且新加载的视图作为纵向视图添加到窗口之外

我尝试将旧视图的变换强制到新视图上,但奇怪的是,它给出了旋转,但偏移了愚蠢的平移

有没有办法告诉UIViewController“现在进行旋转”

编辑:

我添加了一个相当愚蠢的hack:

    // restore params
    self.view.transform = xfrm;
    self.view.center = CGPointMake(window.bounds.size.width / 2., window.bounds.size.height / 2.);
    [window addSubview: self.view];
这给出了期望的结果,但我真的很不高兴在我的代码库中有这样的东西。肯定有更好的方法吗

谢谢

编辑:


在与JPH进行了一些讨论后,答案是“不要这样做”。有关一些细节和重新设计的信息,请参阅评论。

您的问题在于使用此:

[window addSubview: self.view];
从文件中:

如果向UIWindow添加其他视图控制器的UIView属性 (与主视图控制器处于同一级别)通过以下方式:

[myWindow addSubview:另一个控制器.view]

此附加视图控制器将不会接收旋转事件和 永远不会旋转。仅添加到UIWindow的第一个视图控制器 将旋转

我更喜欢使用根视图控制器的设计,并将子视图添加到根视图控制器的视图中


另一种选择是不杀死视图并重新添加它,而是更新该视图中需要更新的所有内容。我不确定我是否理解您为什么要立即删除视图并重新添加它。

您的问题在于使用此:

[window addSubview: self.view];
从文件中:

如果向UIWindow添加其他视图控制器的UIView属性 (与主视图控制器处于同一级别)通过以下方式:

[myWindow addSubview:另一个控制器.view]

此附加视图控制器将不会接收旋转事件和 永远不会旋转。仅添加到UIWindow的第一个视图控制器 将旋转

我更喜欢使用根视图控制器的设计,并将子视图添加到根视图控制器的视图中


另一种选择是不杀死视图并重新添加它,而是更新该视图中需要更新的所有内容。我不知道我是否理解您为什么要删除视图并立即重新添加它。

您是否考虑过查看整个设计?我不确定这个问题的上下文,但“强制旋转”、“强制VC重新加载其视图”、直接向窗口添加子视图。。。看起来有很多黑客攻击..这是根视图控制器吗?为什么要将视图添加到窗口中,而不是作为子视图添加到父视图控制器中?背景:我有一个关于一系列场景的故事。有一个显示场景的SceneViewController。场景1、2、3的SVC相同。。。每个场景都有很多带有计时器和动画等的子视图。因此,我不想推送/呈现新的SVC,我只想重用现有的SVC。所以我杀死了它的视图并强制重新加载。到目前为止,还不太奇怪。但是视图已经在应用程序窗口中,所以我需要在那里替换它。好的,有点不对劲。Esp给出旋转/定位位,这就是问题所在。你的建议…?是的,根视图控制器。我将它添加到它现有的父视图中,它恰好不是UIView,而是窗口。虽然可以在两者之间插入ViewController/视图,但这并不能真正改变问题/问题。我不理解“终止其视图”的必要性,为什么在不删除/读取视图的情况下不能更新此视图上的项目?您是否考虑过审查整个设计?我不确定这个问题的上下文,但“强制旋转”、“强制VC重新加载其视图”、直接向窗口添加子视图。。。看起来有很多黑客攻击..这是根视图控制器吗?为什么要将视图添加到窗口中,而不是作为子视图添加到父视图控制器中?背景:我有一个关于一系列场景的故事。有一个显示场景的SceneViewController。场景1、2、3的SVC相同。。。每个场景都有很多带有计时器和动画等的子视图。因此,我不想推送/呈现新的SVC,我只想重用现有的SVC。所以我杀死了它的视图并强制重新加载。到目前为止,还不太奇怪。但是视图已经在应用程序窗口中,所以我需要在那里替换它。好的,有点不对劲。Esp给出旋转/定位位,这就是问题所在。你的建议…?是的,根视图控制器。我将它添加到它现有的父视图中,它恰好不是UIView,而是窗口。虽然可以在两者之间插入ViewController/视图,但这并不能真正改变问题/问题。我不理解“终止其视图”的必要性,为什么在不删除/读取视图的情况下不能更新此视图上的项目?我终止并重新添加它,因为viewDidLoad根据当前场景加载内容。(场景1、场景2等的不同内容)基本上,杀死然后访问视图只是一种强制卸载,然后强制viewDidLoad的方法。我可以添加一个中间视图控制器,这并不难。或者我可以将所有内容放入一个大容器视图中,然后丢弃/重新创建它(而不是整个self.view)——也许这是我最好的解决方案。是的,我会尝试一下;听起来好多了。我将使用容器视图的想法,如果它符合我的要求(似乎会),那么我将在添加“…子视图”的基础上接受这个答案