получить время сервера в php - проблемы с часовым поясом

в оболочке, время моего сервера (простая дата в bash): Легко - просто добавьте код в willAnimateRotationToInterfaceOrientation: callback - (void) ...

В MainViewController мне нужно настроить некоторые изображения при изменении ориентации. Легко - просто добавьте код в willAnimateRotationToInterfaceOrientation: обратный вызов

- (void) willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)orientation duration:(NSTimeInterval)duration {
  NSLog(@"orientation: %@", name(orientation));
  ..

Работает должным образом. Находясь в портретной ориентации, я нажимаю UIViewController с другой ориентацией на UINavigationController. Я перехожу в режим «Пейзаж», и все в порядке.

Затем я возвращаюсь к MainViewController, вызывая

[self.navigationController popViewControllerAnimated:YES];

. В то время как подпредставления MainViewController настраиваются на «Пейзаж» в соответствии с масками автоматического изменения размера, willAnimateRotationToInterfaceOrientation: не работает. звоните!

Я ожидал willAnimateRotationToInterfaceOrientation: также должен вызываться, когда он не находится на вершине стека контроллера навигации, или, по крайней мере, вызываться при возврате на вершину стека.

Я предполагаю, что мог бы вручную вызвать willAnimateRotationToInterfaceOrientation: перед всплывающим окном но это кажется неправильным.

Что мне не хватает?

11
задан tcurdt 29 August 2010 в 16:02
поделиться

5 ответов

Это ожидаемое поведение, поскольку Вижу. Если UIVC не находится на вершине стека, то вызов willAnimateRotationToInterfaceOrientation вызывать не следует, поскольку в это время вращение не анимируется. То, как я справлялся с этим в приложении, над которым сейчас работаю, похоже на приведенный выше постер. Любой UIVC, поддерживающий все ориентации, получает новый метод

— (void) updateLayoutForNewOrientation: (UIInterfaceOrientation) ориентация;

Этот метод вызывается из двух мест:


-(void) viewWillAppear: (BOOL) animated {
  [super viewWillAppear: animated];
  [self updateLayoutForNewOrientation: self.interfaceOrientation];
}

-(void) willAnimateRotationToInterfaceOrientation: (UIInterfaceOrientation) interfaceOrientation duration: (NSTimeInterval) duration { [self updateLayoutForNewOrientation: interfaceOrientation]; }

Новый метод прост:


- (void) updateLayoutForNewOrientation: (UIInterfaceOrientation) orientation {
    if (UIInterfaceOrientationIsLandscape(orientation)) {
        // Do some stuff
    } else {
        // Do some other stuff
    }
}

Кроме того, если вы беспокоитесь о том, что код работает, когда он на самом деле не нужен, вы можете отслеживать ориентацию устройства, когда новый UIVC был помещен в стек, с помощью переменной экземпляра, установленной в viewDidDisappear, и консультироваться с ней, чтобы принять решение. если вы хотите "Делать вещи"

36
ответ дан 3 December 2019 в 01:28
поделиться

Разве это не правильное поведение? Потому что обратный вызов анимации следует вызывать только до изменения ориентации анимации. Когда вы открываете самый верхний вид, вы видите всплывающую анимацию, а затем уже повернутый вид внизу. Нет анимации вращения и, следовательно, нет обратного вызова. (Но вы обязательно должны получить willRotateToInterfaceOrientation:duration:.)

P.S. У меня есть пример проекта Xcode для экспериментов по ориентации интерфейса на GitHub, возможно, вам будет интересно.

2
ответ дан 3 December 2019 в 01:28
поделиться

поскольку вращение не происходит, когда вы возвращаетесь к основному виду, вызов willAnimateRotationToInterfaceOrientation не будет вызываться. Однако, если вы хотите сделать что-то на основе измененной ориентации, вы можете добавить следующий код в свой метод viewWillAppear основного контроллера представления

- (void)viewWillAppear:(BOOL)animated {
UIInterfaceOrientation statusBarOrientation = [[UIApplication sharedApplication] statusBarOrientation];
    if(UIInterfaceOrientationIsPortrait(statusBarOrientation)){
        NSLog(@"Portrait");
....your code....
    }
    else {
        NSLog(@"Landscape");
....your code....
    }


}
1
ответ дан 3 December 2019 в 01:28
поделиться

Я также сталкивался с таким поведением, и я думаю, что это связано с производительностью и архитектурными причинами; Насколько мне известно, этот метод вызывается внутри контекста анимации UIView (который позволяет вам изменять кадры и центры и иметь красивую анимацию, пока все вращается), и когда ваш контроллер представления не виден, либо UIKit избегает выполнения этого метода, либо просто невозможно выполните его, потому что вид не виден (и, вероятно, вы не можете анимировать то, что видите). Опять же, это чистое предположение :)

0
ответ дан 3 December 2019 в 01:28
поделиться

Я согласен со Скоттом в этом - я думаю, что это поведение, которого следует ожидать.

См. также Руководство по программированию контроллера представления, где говорится, что только самый передний контроллер будет вызывать методы. (Выполните поиск по слову «самый передний», чтобы найти два соответствующих места в документе.)

1
ответ дан 3 December 2019 в 01:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: