Интерфейсная ориентация остается такой же после removeFromSuperview и снова addSubview - PullRequest
2 голосов
/ 10 марта 2011

Я переключаюсь между представлениями, используя анимацию представления, это работает, но у меня проблема с ориентацией интерфейса.

У меня есть два представления для окна.

  1. authenticationViewCont
  2. mainViewCont

У обоих есть кнопка, при нажатии кнопки на authenticationViewCont я удаляю ее и показываю mainViewCont и наоборот.

После добавления просмотраauthenticationViewCont.view и перевод устройства в портретный режим, затем удалите его с помощью removeFromSuperview, затем я изменяю ориентацию устройства на ландшафт в моих руках, затем снова добавляю Subview the authenticationViewCont.Сначала он отображал анимацию в портретной ориентации и изменение ориентации после анимации.

-(void)mainToAuthentication {
    CGRect originalFrame = authenticationViewCont.view.frame;
    CGRect modifiedFrame = originalFrame;
    modifiedFrame.origin.y = originalFrame.size.height;
    // made view out from screen
    authenticationViewCont.view.frame = modifiedFrame;
    // add sub view on top of other views
    [self.window addSubview:authenticationViewCont.view];
    // transiting view from bottom to center of screen
    [UIView animateWithDuration:0.5
        animations:^{ authenticationViewCont.view.frame = originalFrame; }
        completion:^(BOOL finished){ mainViewCont.view removeFromSuperview; }];
}

-(void)authenticationToMain {
    CGRect originalFrame = mainViewCont.view.frame;
    CGRect modifiedFrame = originalFrame;
    modifiedFrame.origin.y = -originalFrame.size.height;
    // made view out from screen
    mainViewCont.view.frame = modifiedFrame;
    // add sub view on top of other views
    [self.window addSubview:mainViewCont.view];
    // transiting view from top to center of screen
    [UIView animateWithDuration:0.5
        animations:^{ mainViewCont.view.frame = originalFrame; }
        completion:^(BOOL finished){ authenticationViewCont.view removeFromSuperview; }];
}

Как настроить отображение в текущей ориентации интерфейса вместо старой ориентации интерфейса, в которой оно было removeFromSuperview?

1 Ответ

0 голосов
/ 20 августа 2011

Я думаю, что проблема здесь в том, что вы сначала добавляете один viewController.view поверх другого, а затем удаляете старый.

Проблема с окном ожидает только один rootViewController.Таким образом, окно будет только передавать события вращения на первый контроллер.Это означает, что ваш второй viewController не получит события поворота, пока не будет вызван завершенный блок.

Я бы обошел этот способ, поместив этот код переключения внутри rootViewController, который находится в окне.Затем, когда вы выполняете переключение, вы можете передать текущее вращение rootviewController и настроить свой authenticationViewController в соответствии с направлением, которое вы передаете ему

...