iOS 7 (подуровень) AVPlayer Полноэкранная анимация и необходимость выше (обложки) UINavigationBar

Я пытаюсь отказаться от MPMoviePlayerController и переключиться на AVPlayer, но столкнулся с проблемой «Полноэкранная анимация AVPlayer (Layer)».

Исходный код проекта: http://www.kevin-and-idea.com/avplayer.zip

Цель: в настоящее время AVPlayer (слой) является частью элементов ViewController. Игра должна иметь возможность переключаться между «маленьким» и полноэкранным режимом, а когда он находится в полноэкранном режиме, он должен находиться над (обложкой) панелью статуй и панелью навигации. Кроме того, игрок должен иметь возможность вращения, это зависит от ориентации устройства.

Проблема: не знаю, как «убрать» AVPlayerLayer и «закрыть» весь экран, включая панель статуй и панель навигации.

В настоящее время: я установил скрытие UINavigationBar и скрытие строки состояния на архивирование, но это не цель и вращаюсь без проблем.

СПАСИБО БОЛЬШОЕ!!!

p.s. Щелкните значок информации, чтобы переключиться в полноэкранный режим. https://c1.staticflickr.com/1/388/18237765479_7d3c292449_z.jpg

Код

- (IBAction)goFullScreen:(id)sender {

[UIView animateWithDuration:0.25
                      delay:0.0
                    options:UIViewAnimationOptionCurveEaseOut
                 animations:^{
                     if (topSpaceConstraints.priority == 999) {
                         videoContainerSizeRatioConstraints.priority = 250;
                         [[UIApplication sharedApplication] setStatusBarHidden:YES];
                         [self.navigationController setNavigationBarHidden:YES];
                         topSpaceConstraints.priority = 250;
                     } else {
                         videoContainerSizeRatioConstraints.priority = 999;
                         [[UIApplication sharedApplication] setStatusBarHidden:NO];
                         [self.navigationController setNavigationBarHidden:NO];
                         topSpaceConstraints.priority = 999;
                     }
                     [self.view layoutIfNeeded];

                 }
                 completion:nil];

}

person Kevin    schedule 03.06.2015    source источник


Ответы (1)


У вас есть два варианта (может быть, больше): вы создаете представление, которое находится выше в иерархии представлений, чем представление вашего контроллера навигации, поэтому вы можете просто поместить что-то, что находится «выше». Вероятно, это будет самый привлекательный визуально, и я уверен, что большинство профессиональных приложений используют его.

Другой вариант - просто скрыть панель навигации, когда кто-то нажимает кнопку полноэкранного режима.

ОБНОВЛЕНИЕ:

Может быть, лучший вариант для варианта 1:

Я посмотрел пред. мой проект, и, возможно, вы захотите использовать это:

Создайте новое окно, в котором будет находиться ваш avplayer.

Подкласс UIView и реализуйте метод show следующим образом:

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.alpha = 0;
self.window.windowLevel = UIWindowLevelAlert;
self.window.backgroundColor = [UIColor colorWithWhite:0.0f alpha:0.0f];

[self.window addSubview:self];

[self.window addSubview:self];
[self.window makeKeyAndVisible];

[UIView animateKeyframesWithDuration:0.3 delay:0 options:UIViewKeyframeAnimationOptionBeginFromCurrentState animations:^{

        [UIView addKeyframeWithRelativeStartTime:0. relativeDuration:0.7 animations:^{
            // PROBABLY MORE ANIMATION HERE...
            self.alpha = 1;
        }];

        [UIView addKeyframeWithRelativeStartTime:0 relativeDuration:1 animations:^{
            self.window.backgroundColor = [UIColor colorWithWhite:0.0f alpha:self.targetDimmDensity];

        }];
    } completion:^(BOOL finished) {

    }];

self.window - это новый @property (nonatomic, strong) UIWindow *window;, который я создал!

person Nils Ziehn    schedule 03.06.2015
comment
Спасибо, Нильс! Согласен с вами, кажется, всего два варианта. - person Kevin; 03.06.2015
comment
WO! Это красивое и умное решение! Большое спасибо Нильсу, пожалуйста - person Kevin; 03.06.2015