The documentation说如果我想同时支持肖像和风景,我基本上有两种方法可以做到这一点:
我想提供布局大不相同的信息,但逻辑是相同的。理想情况下,我会为同一个viewcontroller加载另一个XIB,但它似乎不是一个选项。
听起来像#2是我需要做的,但我的问题是听起来它会使用标准的modalviewcontroller动画,它们与设备旋转动画完全不同。 (当然,作为我的懒惰人,我没有测试这个假设。)
那么,如何使用相同的viewcontroller但不同的XIB为landscape添加替代布局?我应该使用上面的方法#2并且旋转动画是自然的吗?或者还有其他方式吗?
答案 0 :(得分:1)
我在UIView
中实例化我的-viewDidLoad:
个实例,并将它们作为子视图添加到视图控制器的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:
将这些子视图置于中心位置:
- (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:
方法设置各种子视图对象的中心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);
// ...
}
}
加载视图控制器后,将根据设备的当前方向创建和定位UIView
个实例。如果随后旋转设备,则视图将重新居中到新坐标。
为了使这更顺畅,可以使用-adjustViewsForOrientation:
中的键控动画,以便子视图更优雅地从一个中心移动到另一个中心。但是现在,上述情况对我有用。