Как анимировать вращение MPMoviePlayerController? - PullRequest
0 голосов
/ 11 апреля 2011

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

Я сделал быстрое и грязное решение без анимации, чтобы получить правильное поведение:

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
    moviePlayer.view.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.width*0.75);
}

Работает правильно, но не красиво. В настоящее время я готовлю приложение для демонстрации, так что теперь правильной работы недостаточно, это должно быть красиво.

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

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
    [UIView animateWithDuration:duration animations:^{
        moviePlayer.view.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.width*0.75);
    }];
}

Правильно, self.view.frame еще не обновлен.

Любой совет, как с этим справиться, без жестко закодированных кадров?

1 Ответ

0 голосов
/ 11 апреля 2011

Может быть более чистый способ сделать это, но я вычисляю, какой новый кадр должен быть, используя текущий и новую ориентацию:

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
  CGSize size = self.view.frame.size;
  CGRect newRect;
  if (toInterfaceOrientation == UIInterfaceOrientationPortrait || toInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) {
    newRect = CGRectMake(0, 0, MIN(size.width, size.height), MAX(size.width, size.height));
  } else {
    newRect = CGRectMake(0, 0, MAX(size.width, size.height), MIN(size.width, size.height));
  }

  [UIView animateWithDuration:duration animations:^{
    player.view.frame = newRect;
  }];
}
...