Нашел.
Была такая же проблема - вот что я сделал. Я бы предложил добавить код к вашему проекту один за другим, чтобы увидеть, как он работает.
Во-первых - я поместил вещи в портретный режим.
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait animated:NO];
Затем я сунул фильм вниз в строку состояния.Примечание - это предполагает, что видео имеет отношение 4x3 сторон
theVideo = [[MPMoviePlayerController alloc] initWithContentURL: [NSURL fileURLWithPath : path]];
float aspectRatio = (3.0f/4.0f);
float theMovieHeight = [self view].bounds.size.width * aspectRatio;
[[theVideo view] setFrame:(CGRectMake(0, [self view].bounds.size.height - theMovieHeight, [self view].bounds.size.width, theMovieHeight))];
Тогда, в том месте, где приложение запускается (в моем проекте, в функции didFinishLaunchingWithOptions
) - в любом случае, вам просто нужен доступ к оконный объект.
float aspectRatio = (3.0f/4.0f);
float theMovieHeight = self.window.bounds.size.width * aspectRatio;
float theSpaceAboveTheMovie = self.window.bounds.size.height - theMovieHeight;
float whereTheMovieShouldBeCentered = (self.window.bounds.size.height - theMovieHeight)/2;
CGAffineTransform theTransform = CGAffineTransformMakeTranslation(0,0);
theTransform = CGAffineTransformScale(theTransform, 1.0f/aspectRatio, 1.0f/aspectRatio);
theTransform = CGAffineTransformTranslate(theTransform, -whereTheMovieShouldBeCentered, 0);
theTransform = CGAffineTransformRotate(theTransform, M_PI/2);
theTransform = CGAffineTransformTranslate(theTransform, 0, -theSpaceAboveTheMovie);
[self.window setTransform:theTransform];
Помните, что аффинные преобразования выполняются в обратном порядке. Так что если вы хотите, чтобы увидеть, что каждое преобразование делает (я предлагаю вам нужно), закомментируйте первые три
Здесь вы должны увидеть фильм и статус бар сосредоточенного на странице
// theTransform = CGAffineTransformScale(theTransform, 1.0f/aspectRatio, 1.0f/aspectRatio);
// theTransform = CGAffineTransformTranslate(theTransform, -whereTheMovieShouldBeCentered, 0);
// theTransform = CGAffineTransformRotate(theTransform, M_PI/2);
theTransform = CGAffineTransformTranslate(theTransform, 0, -theSpaceAboveTheMovie);
Тогда первый два
Здесь вы должны увидеть фильм и строка состояния не вращается и не по центру
// theTransform = CGAffineTransformScale(theTransform, 1.0f/aspectRatio, 1.0f/aspectRatio);
// theTransform = CGAffineTransformTranslate(theTransform, -whereTheMovieShouldBeCentered, 0);
theTransform = CGAffineTransformRotate(theTransform, M_PI/2);
theTransform = CGAffineTransformTranslate(theTransform, 0, -theSpaceAboveTheMovie);
Здесь вы должны увидеть его вращаться и по центру
// theTransform = CGAffineTransformScale(theTransform, 1.0f/aspectRatio, 1.0f/aspectRatio);
theTransform = CGAffineTransformTranslate(theTransform, -whereTheMovieShouldBeCentered, 0);
theTransform = CGAffineTransformRotate(theTransform, M_PI/2);
theTransform = CGAffineTransformTranslate(theTransform, 0, -theSpaceAboveTheMovie);
И с ними все, что вращается и полноэкранным
Вы можете загрузить мой пример кода here.
Я испытываю тот же вопрос. По-прежнему нет обходного пути? – samvermette
Я тоже. Кто-нибудь получил эту работу? – V1ru8
Получили ли вы ответ? – Jingwei