ориентация экрана iphone - PullRequest
       3

ориентация экрана iphone

0 голосов
/ 08 февраля 2012

Привет! Я пытаюсь обеспечить ориентацию экрана в своем приложении, и я прочитал много документов в Интернете, но когда я пытаюсь это сделать, это просто катастрофа (я пробовал эмулятор и iphone).С одной стороны, когда экран повернут в горизонтальное положение, половина видов больше не видна.Их положение слева и справа пусто, плюс, если я открою контроллер следующего вида, а затем поверну снова, я вижу через части второго вида первого вида, это просто ужасно, я не знаю, как это исправить(Исключая блокировку, возможность блокировки ориентации в портретной ориентации).Я знаю, в Android вы можете предоставить различные макеты XML для портрета и ландшафта.Есть ли способ сделать это в iphone?Если так, то как?

каждое из моих представлений состоит из контроллера и .xib. Существует «основной» контроллер, а другие контроллеры называются так:

ayuda=[[AyudaView alloc]
               initWithNibName:@"AyudaView"
               bundle:nil];
        [self.view addSubview:ayuda.view];

также я уже добавил эти методык главному контроллеру:

- (void)viewWillAppear:(BOOL)animated
{  
[super viewWillAppear:animated];

UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
if(UIDeviceOrientationIsValidInterfaceOrientation(orientation)) {
    [self handleInterfaceRotationForOrientation:orientation];
}

}
#pragma mark -
#pragma mark Screen Orientation Handling
- (void)handleInterfaceRotationForOrientation:(UIInterfaceOrientation)interfaceOrientation {
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
[self handleInterfaceRotationForOrientation:interfaceOrientation];
return YES;
}

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation   duration:(NSTimeInterval)duration {
[self handleInterfaceRotationForOrientation:toInterfaceOrientation];
}

как указано здесь и попытался поиграть с параметром автоматического изменения размера, но он только ухудшается

Большое спасибо

РЕДАКТИРОВАТЬ: хорошо, я читал еще:

http://www.geckogeek.fr/iphone-forcer-le-mode-landscape-ou-portrait-en-cours-dexecution.html

http://www.cocoaosx.com/2011/11/10/rotatingviewcontroller-display-a-different-uiviewcontroller-depending-on-the-rotation-of-the-device/

и в основном я обнаружил, что вы должны создать 2 контроллерано это решение проблематично для меня из-за файлов пера.Я имею в виду, что я также должен был бы создать 2 пера, чтобы удвоить количество кода (или использовать библиотеку выше).Что, если у меня есть значения в моих текстовых полях, я должен просто отправить их?

1 Ответ

0 голосов
/ 08 февраля 2012

Итак, кроме комментариев, предлагающих вам не иметь никакого представления о том, что происходит в вашем коде (что может или не может быть правдой - кого я должен судить?), Я вижу несколько проблем.

Первая проблема заключается в том, что я не думаю, что вы понимаете MVC и то, как iOS обрабатывает иерархию представлений. Вы правы в том, что каждое из ваших представлений контролируется контроллером и разрабатывается с помощью .xib (в некоторых случаях представлению не нужен собственный контроллер, но для простоты мы предположим, что вам это нужно). Тем не менее, вы не правы в том, как вы представляете эти виды на экране. Контроллер вида отвечает за представление или удаление вида с экрана. Представление знает только то, что оно отображает, например метки или кнопки. Контроллер отвечает за указание вида , что отображать на этих ярлыках и кнопках. Вместо добавления нового представления VC как подпредставления вашего основного представления, поместите его в стек контроллера навигации или представьте представление модально. Если вы в своем главном ВК, вы можете сказать

ayuda = [[AyudaView alloc] initWithNibName:nil bundle:nil];
[self presentModalViewController:ayuda animated:YES];

Я думаю, что правильной иерархии представлений может быть достаточно для того, чтобы решить ваш хаос смены ландшафта / портрета. Но пока мы находимся на эту тему ... почему вы создаете этот метод handleInterfaceRotation? У контроллеров представления уже есть метод для этого, названный

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration;

Используйте этот метод для обработки вращения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...