У меня есть два вида внутри моей XIB для каждой ориентации.Они похожи, но разные, поэтому я не могу полагаться на авторазмер.Я хочу переключить эти представления в зависимости от ориентации.Когда я использую метод didRotateFromInterfaceOrientation, то, когда он поворачивается из Portrait, он отображает альбомную ориентацию, это проблема, когда он поворачивается к PortraitUpsideDown.
И если я изменяю код для willRotateToInterfaceOrientation, тогда PortraitView скрывается от LandscapeView.пользователь, но когда пользователь нажимает кнопки, они не отображаются серым цветом, чтобы показать, что они были нажаты, и приложение реагирует так, как будто пользователь нажимает кнопки, которые находятся в портретном представлении.
Я собираюсь сделать этопроблема в правильном порядке?Что мне нужно сделать, чтобы исправить эти ошибки.Я бы предпочел использовать метод willRotateToInterfaceOrientation.
Спасибо,
КОД:
- (void)viewDidLoad {
...
for (UIView *v in self.view.subviews) {
v.autoresizingMask = UIViewAutoresizingNone;
}
...
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return YES;
}
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
if(fromInterfaceOrientation == UIInterfaceOrientationPortrait
|| fromInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) {
//Add landscape view
if(![landscapeView superview]){
for (UIView *v in landscapeView.subviews) {
v.autoresizingMask = UIViewAutoresizingNone;
}
//No effect after testing
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.33];
[self.view addSubview:landscapeView];
[UIView commitAnimations];
}
}else {
if([landscapeView superview]){
[landscapeView removeFromSuperview];
}
}
}
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
if(toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft
|| toInterfaceOrientation == UIInterfaceOrientationLandscapeRight) {
//Add landscape view
if(![landscapeView superview]){
for (UIView *v in landscapeView.subviews) {
v.autoresizingMask = UIViewAutoresizingNone;
}
//No effect after testing
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.33];
[self.view addSubview:landscapeView];
[UIView commitAnimations];
}
}else {
if([landscapeView superview]){
[landscapeView removeFromSuperview];
}
}
}