UIStatusBar + переключение полнокадрового видео + повороты = проблемы с кадрами

Мое видео (экземпляр AVPlayer) воспроизводится в меньшем «свернутом» окне для запуска. Коснитесь экрана, чтобы отобразить элементы управления, и позвольте пользователю развернуть его на весь экран, который закрывает строку состояния. Я даю viewController это для его полного кадра:

[[UIScreen mainScreen] bounds]

Но viewController по-прежнему считает, что строка состояния есть, даже если я сначала ее скрою:

[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide]

Таким образом, видеоэкран начинается ниже невидимой строки состояния, в точке (0, statusBarHeight). Если я поворачиваю устройство с видимыми элементами управления (что делает видимой строку состояния), проблема остается. Если я поворачиваю устройство, когда элементы управления скрыты (и строка состояния отсутствует), все исправляется, и видеоокно начинается с (0,0), как и ожидалось.

Мое решение состояло в том, чтобы запустить полноэкранное видеоокно в (0, -statusBarHeight), затем наблюдать за вращением без элементов управления, когда я могу вернуть видеоокно в исходное положение. Фу.

Когда я уменьшаю видео до исходного размера, если было вращение без элементов управления, окно видео будет слишком высоким на (statusBarHeight) пикселей.

Итак, еще одно логическое значение, чтобы сказать мне, когда я минимизирую видео, должен ли я исправить его «реальную» позицию на (0, +statusBarHeight). Двойная хуйня.

Если в этот момент мы повернем устройство, все будет хорошо. Но если мы вместо этого сразу максимизируем видео, то полноэкранное видео будет слишком высоким на (statusBarHeight) пикселей. Тройной фу!

Хорошо, больше логических значений, но все это усложняется тем, что видеодвижок — это отдельный фреймворк, и у «управляющего приложения» тоже есть похожие проблемы.. ААА!

Я иду об этом в неправильном пути? Это становится слишком сложным и хрупким. Я знаю (посмотрев на другие приложения в дикой природе), что это распространенная проблема — у меня есть список приложений, которые демонстрируют такое же поведение. Есть ли способ лучше?


person coco    schedule 07.11.2012    source источник


Ответы (1)


Я написал очень простое приложение, чтобы воссоздать эту проблему, и использовал «Инцидент с технической поддержкой», чтобы спросить об этом службу технической поддержки разработчиков Apple. Мне посоветовали написать отчет об ошибке (ID 12685127). Они говорят:

AVPlayer точно не учитывает строку состояния..

а также

Боюсь, я не вижу лучшего решения, кроме исправления этого, как вы делаете сейчас..

person coco    schedule 12.11.2012