поворот устройства iphone - PullRequest
       10

поворот устройства iphone

2 голосов
/ 22 сентября 2010

Все мои ширины, высоты, положения и все остальное настроены относительно видов и т. Д., Поэтому, если iphone поворачивается, он должен «расширяться, чтобы соответствовать», как это было.:)

Как мне сказать, чтобы iphone находился в «альбомном режиме», т. Е. Обновлять, но теперь все ширины - это высоты, а все высоты - это ширина?

Спасибо, Том

РЕДАКТИРОВАТЬ Вот код, который у меня сейчас есть ... он все еще не работает - я не могу понять, как заставить его работать

В моем контроллере представления(не корневой контроллер представления) У меня есть этот метод:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    return YES;
}

(я также пытался поместить этот метод в мой корневой контроллер представления, но он тоже не работал)

Тогда в моем viewDidLoad методе у меня есть это:

[self.view setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight];
[self.view setAutoresizesSubviews:YES];

Это не работает.:( по крайней мере, не в симуляторе.

Ответы [ 3 ]

2 голосов
/ 22 сентября 2010

Установите AutoresizingMask вашего взгляда в соответствии с тем, что вы ожидаете.

или реализуйте метод layoutSubViews.

Также не забудьте реализовать метод shouldAutorotateToInterfaceOrientation для viewControllers. Поток выглядит следующим образом.

  • Устройство вращается
  • root ViewController получает событие shouldAutoRotateToInterfaceOrientation
  • Если viewController отвечает YES, событие willRotateToInterfaceOrientation отправляется на контроллеры
  • контроллер изменяет свой вид в соответствии с autoresizingMask
  • если свойство представления autoresizesSubviews имеет значение true, процесс развертывается до подпредставлений
  • didRotateToInterfaceOrientation событие отправляется на контроллер.

Вот пример представления кода контроллера

- (void)loadView {
    UIView* theView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
    theView.backgroundColor = [UIColor blueColor];

    UIView* redRectangle = [[UIView alloc] initWithFrame:CGRectMake(10.0f, 10.0f, 100.0f, 100.0f)];
    redRectangle.tag = 1;
    redRectangle.backgroundColor = [UIColor redColor];
    [theView addSubview:redRectangle];
    [redRectangle release];

    UIView* greenRectangle = [[UIView alloc] initWithFrame:CGRectMake(10.0f, 120.0f, 100.0f, 100.0f)];
    greenRectangle.tag = 2;
    greenRectangle.autoresizingMask = UIViewAutoresizingFlexibleWidth;
    greenRectangle.backgroundColor = [UIColor greenColor];
    [theView addSubview:greenRectangle];
    [greenRectangle release];

    UIView* yellowRectangle = [[UIView alloc] initWithFrame:CGRectMake(theView.bounds.size.width-110.0f, theView.bounds.size.height-110.0f, 100.0f, 100.0f)];
    yellowRectangle.tag = 3;
    yellowRectangle.autoresizingMask = UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleLeftMargin;
    yellowRectangle.backgroundColor = [UIColor yellowColor];
    [theView addSubview:yellowRectangle];
    [yellowRectangle release];

    self.view = theView;
    [theView release];
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    return YES;
}
0 голосов
/ 22 сентября 2010

Сначала проверьте, вызваны или нет методы обратного вызова вашего контроллера представления для событий вращения:

-willRotateToInterfaceOrientation:duration:
-didRotateFromInterfaceOrientation:

Если они не вызываются, то нет смысла идти дальше, потому что ваш viewController не вращаетсявообще!

Это меня интересует - "На мой взгляд контроллер (не контроллер корневого представления)" .Как вы добавляете свой контроллер представления в иерархию окон?Представляете ли вы его или просто добавляете его представление в качестве вспомогательного представления, скажем, в контроллер корневого представления?

0 голосов
/ 22 сентября 2010

Вы можете настроить размер вашего вида автоматически, установив:

[ tmpView setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight ];

Так что при вращении он изменит свой размер.

Но я думаю, что он не будет делать то, что вам нужно,Поэтому, возможно, вам следует добавить функцию (в контроллере), которая вызывается при повороте устройства:

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {

    [ self refreshLayouts ];

}

Затем в refreshLayouts вы сами меняете ширину / высоту так, как вам хочется.

Удачи!

...