gpt4 book ai didi

ios - 如何为同一 View Controller 的不同设备方向加载不同的 XIB?

转载 作者:可可西里 更新时间:2023-11-01 03:34:46 25 4
gpt4 key购买 nike

The documentation说如果我想同时支持纵向和横向,我基本上有两种方法:

  1. 设置 viewcontroller 的 View ,以便 subview 正确自动调整大小并在运行时以编程方式进行较小的更改
  2. 如果变化更大,create an alternative landscape interface并在运行时推送/弹出替代模态视图 Controller

我想展示布局大不相同但逻辑相同的信息。理想情况下,我会为同一个 View Controller 加载另一个 XIB,但这似乎不是一个选项。

听起来 #2 是我需要做的,但我的问题是它听起来像是使用标准的 modalviewcontroller 动画,这与设备旋转动画完全不同。 (当然,作为我这个懒惰的人,我没有检验这个假设。)

那么,如何使用相同的 viewcontroller 但不同的 XIB 为横向加载替代布局?我应该使用上面的#2 方法吗?旋转动画是否自然?还是有别的办法?

最佳答案

我在 -viewDidLoad: 中实例化我的 UIView 实例,并将它们作为 subview 添加到 View Controller 的 view 属性中:

- (void) viewDidLoad {
[super viewDidLoad];

self.myView = [[[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 280.0f, 210.0f)] autorelease];
// ...
[self.view addSubview:myView];
}

然后我调用 -viewWillAppear: 使这些 subview 居中:

- (void) viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self adjustViewsForOrientation:[[UIDevice currentDevice] orientation]];
}

我还覆盖了 -willRotateToInterfaceOrientation:duration:

- (void) willRotateToInterfaceOrientation:(UIInterfaceOrientation)newInterfaceOrientation duration:(NSTimeInterval)duration {
[self adjustViewsForOrientation:newInterfaceOrientation];
}

-adjustViewsForOrientation: 方法根据设备的方向设置各种 subview 对象的中心 CGPoint:

- (void) adjustViewsForOrientation:(UIInterfaceOrientation)orientation {
if (orientation == UIInterfaceOrientationLandscapeLeft || orientation == UIInterfaceOrientationLandscapeRight) {
myView.center = CGPointMake(235.0f, 42.0f);
// ...
}
else if (orientation == UIInterfaceOrientationPortrait || orientation == UIInterfaceOrientationPortraitUpsideDown) {
myView.center = CGPointMake(160.0f, 52.0f);
// ...
}
}

加载 View Controller 时,将创建 UIView 实例并根据设备的当前方向进行定位。如果设备随后旋转, View 将重新居中到新坐标。

为了让它更平滑,可以在 -adjustViewsForOrientation: 中使用键控动画,以便 subview 更优雅地从一个中心移动到另一个中心。但目前以上对我有用。

关于ios - 如何为同一 View Controller 的不同设备方向加载不同的 XIB?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2678732/

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