Автопластинка с настраиваемыми сегментами

Я пытаюсь перекрестно растворяться между двумя контроллерами представления с помощью настраиваемого перехода, переход запускается правильно и выполняет анимацию, как задумано, однако в ландшафтном режиме контроллер представления назначения отображается в его портретном макете на время анимации. Как только анимация завершается, конечный контроллер представления «привязывается» к своему ландшафтному макету. Оба контроллера представления настроены с использованием автоматического макета.

Ниже приведен мой собственный метод выполнения segue:

- (void)perform
{
  UIViewController *srcController = self.sourceViewController;
  UIViewController *dstController = self.destinationViewController;
  dstController.view.transform = srcController.view.transform;

  [UIView transitionFromView:srcController.view 
                      toView:dstController.view 
                    duration:self.animationDuration 
                     options:self.animationOptions 
                  completion:self.animationCompletionBlock];
}

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

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


person Arkcann    schedule 03.10.2012    source источник


Ответы (1)


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

dstController.view.bounds = srcController.view.bounds;

Итак, остальная часть кода становится:

- (void)perform
{
  UIViewController *srcController = self.sourceViewController;
  UIViewController *dstController = self.destinationViewController;
  dstController.view.transform = srcController.view.transform;
  dstController.view.bounds = srcController.view.bounds;

  [UIView transitionFromView:srcController.view 
                      toView:dstController.view 
                    duration:self.animationDuration 
                     options:self.animationOptions 
                  completion:self.animationCompletionBlock];
}
person Arkcann    schedule 04.10.2012