#iphone #ios #xcode #mpmovieplayercontroller #rotation
#iPhone #iOS #xcode #mpmovieplayercontroller #вращение
Вопрос:
K вот интересная проблема
У нас есть приложение, которое демонстрирует необычное поведение
Если вы устанавливаете это приложение (из тестового полета или через xcode debug) на «чистое» устройство (где приложение ранее не существовало или было ранее удалено), когда приложение воспроизводит mp4 из Интернета или из локальной памяти. MPMoviePlayerViewController, используемый для воспроизведения приложения, не будет вращаться.
Однако, если вы принудительно завершите работу приложения и запустите его снова, все будет вращаться правильно. Даже если вы выйдете и вернетесь, не закрыв фоновый поток, видео не будет вращаться.
Вот простой код
mediaController = [[MPMoviePlayerViewController alloc] initWithContentURL: [NSURL fileURLWithPath: videoPath]];
[self presentMoviePlayerViewControllerAnimated: mediaController];
[mediaController release];
Есть идеи?
Комментарии:
1. Дальнейшее расследование показывает, что метод shouldRotate никогда не вызывается при повороте устройства. Он вызывается, когда отображается проигрыватель, поэтому видео правильно выровнено по первоначальной ориентации, но никогда не меняется
2. Отображается ли текущий контроллер представления (self) во всплывающем окне или модально?
3. Это вращение только при повторном запуске звучит так, как будто у вас есть какие-то другие проблемы в вашем приложении. Вы пытались разработать небольшую демонстрацию с минимальным количеством кода, чтобы подтвердить эту проблему?
4. self — это корневой вид контроллера навигации на контроллере панели вкладок. В настоящее время я пытаюсь настроить и сузить проблему в тестовом приложении. Я ожидаю, что это будет что-то в моем коде, но тот факт, что он работает каждый раз, кроме первого после установки, сбивает с толку.
Ответ №1:
Возможно, одно из корневых представлений для другой вкладки останавливает вращение корневого представления, содержащего ваш проигрыватель. UITabBarController запрашивает все свои дочерние контроллеры просмотра (по одному для каждой вкладки), должен ли он разрешать вращение, и разрешает поворот в заданную ориентацию только в том случае, если все они это разрешают. Это сделано для того, чтобы избежать резкого переключения ориентации с одной на другую при переключении вкладок пользователем. Попробуйте поставить точку останова в shouldAllowAutoRotation для всех дочерних элементов UITabBarController и посмотреть, будут ли они вызваны.
Комментарии:
1. Я проверю это, но это не объясняет, почему это происходит каждый раз, за исключением случаев, когда приложение только что установлено
Ответ №2:
Я обнаружил проблему с этим. UIWindow может иметь только одно представление. Если добавлен другой, 2nd views не получит уведомление. У меня было действие, которое запускалось при первой загрузке, которая делала это, заставляя представления не вращаться.