IOS - Видео не вращается только в iOS7 над iPhone?
Что я сделал?
Я воспроизвожу видео в расширенном классе MPMoviePlayerViewController и реализовал функции ориентации следующим образом
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
if (toInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown){
return FALSE;
}
else{
return TRUE;
}
}
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
[self setControlsPositions:toInterfaceOrientation];
}
-(BOOL)shouldAutorotate
{
return YES;
}
Какая проблема, с которой я сталкиваюсь?
Приложение работает до iOS6 на iPhone и iPad Almong с iPad (с iOS7), но видео не вращается над iPhone с установленной iOS7.
В чем причина такой проблемы и как ее можно решить?
Обновление
Я обнаружил, что видео вращается, если setMovieSourceType
установлен на MPMovieSourceTypeUnknown
, но не вращается, когда установлено значение `MPMovieSourceTypeStreaming
Ответы
Ответ 1
После того, как яблоко захотело, чтобы я дал им образец для сообщения об ошибке, сообщенного мной в iOS-7, я обнаружил, что я не нажимал на контроллер вида, но я добавлял представление в окно.
В таких случаях другие диспетчеры представлений получают события ориентации, но подкласс MPMoviePlayerViewController
не так, я просто представил контроллер представления вместо добавления его представления, и он сработал.
Ответ 2
Попробуйте это решение:
На вашем AppDelegate.h
:
@property (nonatomic, assign) BOOL *fullScreenVideoIsPlaying;
На вашем AppDelegate.m
:
@synthesize fullScreenVideoIsPlaying;
- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window{
NSUInteger orientations = UIInterfaceOrientationMaskPortrait;
if (self.fullScreenVideoIsPlaying) {
return UIInterfaceOrientationMaskAllButUpsideDown;
}
else {
if(self.window.rootViewController){
UIViewController *presentedViewController = [[(UINavigationController *)self.window.rootViewController viewControllers] lastObject];
orientations = [presentedViewController supportedInterfaceOrientations];
}
return orientations;
}}
На вашем ViewController:
в методе viewDidLoad
:
myDelegate = (AppDelegate *) [[UIApplication sharedApplication] delegate];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(movieStarted:) name:@"UIMoviePlayerControllerDidEnterFullscreenNotification" object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(movieFinished:) name:@"UIMoviePlayerControllerWillExitFullscreenNotification" object:nil];
И добавьте эти два метода в один класс:
-(void) movieStarted:(NSNotification*) notif {
myDelegate.fullScreenVideoIsPlaying = YES;
}
-(void) youTubeFinished:(movieFinished*) notif {
myDelegate.fullScreenVideoIsPlaying = NO;
}
Ответ 3
Методы вращения, измененные с помощью iOS 6, вам нужно будет добавить методы поворота iOS 6 к вашему контроллеру вида:
- (BOOL)shouldAutorotate {
return YES:
}
- (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskAllButUpsideDown;
}
И вам нужно добавить Supported interface orientations
с поддерживаемой ориентацией в ваши приложения info.plist
.
Из iOS 6.0 release:
Класс UIViewController имеет новые интерфейсы, поддерживающие следующие поведение:
- Новые интерфейсы обеспечивают более четкий путь для управления и отслеживания интерфейсов.
Ответ 4
Я думаю, что вращение устройства заблокировано в центре управления, потому что он работает нормально в ipad ios 7.