【问题标题】:Load Different XIB on Current View When Rotating旋转时在当前视图上加载不同的 XIB
【发布时间】:2011-11-01 07:43:26
【问题描述】:

我的应用程序有 2 个不同的视图(一个用于纵向模式,另一个用于横向模式),我想将它们分成不同的 XIB 文件,以便使用更少的内存。我已经这样做了,但是当我改变 iPad 的方向时,我的视图变成了空白。 我已尝试执行以下操作:

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{
self = [[MyController alloc] initWithNibName:@"MyControllerLandscape" bundle:nil];
}

但它只是初始化没有数据的视图(没有图像,没有标签,...)。如何“卸载”当前视图并以界面方向“加载”新视图,避免弹出视图并推送新视图?

编辑:

我现在已经试过了,它或多或少都在工作:

[[NSBundle mainBundle] loadNibNamed:@"myPortraitView" owner:self options:nil];
[[NSBundle mainBundle] loadNibNamed:@"myLandscapeView" owner:self options:nil];

我现在的问题是:如果我在我的 init 方法上这样做,它会将两个视图都加载到内存中还是只是在需要时加载视图的引用?

【问题讨论】:

    标签: objective-c cocoa-touch ipad xib nib


    【解决方案1】:

    【讨论】:

    • 这是一个不错的解决方案,但是(如果我错了,请纠正我),这个人是不是在每个横向视图都使用一个控制器,而另一个用于纵向模式?我想做的是在内存中只加载一个视图(将显示的那个)并删除另一个,只是为了节省内存。使用该示例,我只会在用户不旋转设备的情况下节省内存,是吗?谢谢!
    • 两个控制器将位于内存中,是的,但如果应用收到内存警告,非活动视图将能够卸载。我想您可以仅在需要时创建视图控制器(即,在将它们推入导航控制器之前)并在弹出后释放它们。这样你在内存中只有一个视图和一个控制器,但当然每次设备旋转时加载视图可能会降低性能 - 尽管我怀疑它会很明显,除非你有非常复杂的视图。跨度>
    猜你喜欢
    • 1970-01-01
    • 2012-06-24
    • 1970-01-01
    • 1970-01-01
    • 2015-08-03
    • 1970-01-01
    • 2012-05-31
    • 2012-07-17
    • 1970-01-01
    相关资源
    最近更新 更多