В документации говорится, что, если я хочу поддерживать и портрет и среду, у меня в основном есть два способа сделать это:
Я хотел бы представить информацию, где расположение существенно отличается, но логика является тем же. Идеально, я загрузил бы другой XIB для того же viewcontroller, но это, кажется, не опция.
Кажется, что № 2 - то, что я должен сделать, но моя проблема с этим состоит в том, что он кажется, что использовал бы стандарт modalviewcontroller анимации, которые являются ничем как анимация вращения устройства. (Конечно, будучи lazywebber, который я, я не протестировал эту гипотезу.)
Так, как я загружаю альтернативное расположение для среды с тем же viewcontroller, но другим XIB? Я должен использовать метод № 2 выше, и действительно ли анимация вращения является естественной? Или есть ли некоторый другой путь?
Я создаю свои экземпляры 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
различных объектов subview, в зависимости от ориентации устройства:
- (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:
, чтобы подпредставления более плавно перемещались из одного центра в другой. Но на данный момент все вышесказанное работает для меня.