UIView не инициализирован должным образом перед вращением - PullRequest
0 голосов
/ 31 июля 2010

Я использую код, очень похожий на следующий:

- (void)flipToViewController:(UIViewController*)targetViewController
              transition:(UIViewAnimationTransition)transition

{if (targetViewController) {[[[self activeViewController] view] setUserInteractionEnabled: NO];

  // force the view to be instantiated (loadView/layoutSubviews)
  [[targetViewController view] setHidden:NO];

  [UIView beginAnimations:nil context:NULL];
  [UIView setAnimationDuration:0.8f];
  [UIView setAnimationTransition:transition forView:self.view cache:YES];

  [targetViewController viewWillAppear:YES];
  [[self activeViewController] viewWillDisappear:YES];

  [[[self activeViewController] view] removeFromSuperview];

  [[self view] addSubview:[targetViewController view]];

  [[self activeViewController] viewDidDisappear:YES];
  [targetViewController viewDidAppear:YES];

  [[targetViewController view] setUserInteractionEnabled:YES];

  [UIView commitAnimations];

  [self setActiveViewController:targetViewController];
  }

}

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

Только после завершения анимации все попадает в правильное местоположение.

Я выполняю все свои настройки подпредставления в viewWillAppear (не viewDidAppear), поэтому я не понимаю, почему он не был инициализирован во времени.

Есть предложения?

Я также заметил (после отладки), что viewWillAppear вызывается перед методом viewDidLoad?Зачем это делать?

1 Ответ

0 голосов
/ 23 мая 2011

Переместить следующие строки:

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.8f];
[UIView setAnimationTransition:transition forView:self.view cache:YES];

.. чуть ниже этой строки:

[[self view] addSubview:[targetViewController view]];

Очевидно, что addSubView / insertSubView не должен находиться внутри анимации.

...