MPMoviePlayerViewController не воспроизводится в альбомной ориентации под 5.1 - PullRequest
2 голосов
/ 09 марта 2012

Что-нибудь изменилось в 5.1, что повлияет на работу MPMoviePlayerViewController в отношении ориентации устройства?

Сегодня я начал получать от пользователей отчеты о том, что видео воспроизводилось только в портретном режиме. Я понял, что они используют 5.1, и я быстро обновил устройство, чтобы воссоздать ситуацию. Мой код не изменился и отлично работает в 4.x, 5.0 и 5.01.

Все виды в моем приложении отображаются в портретном режиме, за исключением того, что когда пользователь нажимает на видео, проигрыватель фильма должен захватить весь экран и больше перейти в ландшафт. Приложение использует 5.0 SDK, но ориентировано на 4.0. Вот код, который я использую для отображения видео:

VideoPlayer *vp = [[VideoPlayer alloc] initWithContentURL:movieURL];
vp.moviePlayer.movieSourceType = src;
vp.moviePlayer.controlStyle = MPMovieControlStyleFullscreen;
vp.moviePlayer.shouldAutoplay = TRUE;
[self presentMoviePlayerViewControllerAnimated:vp];

VideoPlayer является подклассом MPMoviePlayerViewController , где shouldAutorotateToInterfaceOrientation переопределяется следующим образом:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return (interfaceOrientation == UIDeviceOrientationLandscapeLeft);
}

Этот шаблон рекомендуется во всем Интернете и даже в Apple. Я не понимаю, почему он не работает под iOS 5.1 или почему больше людей не жалуются на это.

Любая помощь будет принята с благодарностью.

Ответы [ 3 ]

2 голосов
/ 16 мая 2012

У меня была такая же проблема - я играл фильм в подпредставлении opengl (я делаю интерактивную книгу в альбомном режиме, поэтому мне нужен был мой фильм - (в приложении) также для воспроизведения в альбомной ориентации)

Я исправил это: подразделение открытого glview на * viewcontroller, затем связывание этого * viewcontroller с окном

Так что, работая с cocos2d, я теперь могу использовать весь uikit в правильной ориентации. Отправка всех представлений uikit моим представлениям opengl подклассов. (при добавлении в мое приложение делегата и проверке того, что ориентация указана также в plist.)

"#if GAME_AUTOROTATION == kGameAutorotationUIViewController
    [director setDeviceOrientation:kCCDeviceOrientationPortrait];
"#else
    [director setDeviceOrientation:kCCDeviceOrientationLandscapeRight];
"#endif

надеюсь, что это кому-то поможет :) Я очень новичок в cocos2d, поэтому потребовалось время, чтобы понять, что я делаю неправильно.

1 голос
/ 09 марта 2012

У меня была такая же проблема в iOS 5. Единственный способ заставить его работать, это создать подкласс MPMoviePlayerViewController.

@implementation MovieViewController

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
        return UIInterfaceOrientationIsLandscape(interfaceOrientation);
    } else {
        return UIInterfaceOrientationIsPortrait(interfaceOrientation);
    }
} 
@end

Похоже, вы уже пытались это сделать, но этот блок кода работает для меня на устройстве с iOS 5.1. Не уверен насчет симулятора.

0 голосов
/ 13 марта 2012

У меня была куча проблем с ориентацией после обновления до iOS 5.1. Для меня это было потому, что допустимые ориентации родственных viewcontrollers вверх по цепочке не дали допустимой ориентации для модального контроллера, который я добавлял.

Есть ли в вашей иерархии представлений случаи, когда к представлению добавляются два подпредставления? Я добавлял два подпредставления в мое окно в applicationDidFinishLaunching, и до iOS 5.1 они могли иметь независимые допустимые ориентации. то есть, я мог бы зафиксировать один в портретной ориентации, в то время как верхний вращался. Теперь другое подпредставление настаивает на портретной ориентации.

Мое решение состояло в том, чтобы заставить невращающееся представление ниже:

[self.window insertSubview:self.nonRotatingViewController.view belowSubview:self.rotatingViewController.view];

Этот пост помог мне понять это (и имеет некоторый код): iOS: отключить авторотацию для подпредставления

...