2013-09-30 14 views
15

Co zrobiłem?iOS - wideo nie obraca się tylko w iOS7 na iPhone'ie?

gram wideo w rozszerzonym klasy MPMoviePlayerViewController i wdrożyły funkcje orientacji następująco

- (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; 
} 

Jaki problem jestem stoi?

Aplikacja działa dobrze do iOS6 na iPhone i iPad Almong z iPadem (z iOS7), ale wideo nie obraca się na iPhone'a z zainstalowanym iOS7.

Jaki jest powód takiego problemu i jak można go rozwiązać?

Aktualizacja

znalazłem, że film nie obraca jeśli setMovieSourceType jest zestaw do MPMovieSourceTypeUnknown ale nie obraca się, gdy ustawiono `MPMovieSourceTypeStreaming

+0

Twój wniosek wyraźnie brzmi jak błąd w strukturze MediaPlayer (jeszcze jeden). Gorąco polecam złożyć raport o błędzie za pomocą zminimalizowanego przykładu. – Till

+0

@Till To wydaje się dobrą opcją, ale gdzie wysłać raport o błędzie. Mam na myśli wysłanie e-maila do Apple lub posta na forum Apple? –

+1

Na stronie [serwisy o błędzie na stronie internetowej Apple] (https://bugreport.apple.com). Dodatkowo, dobrym pomysłem może być również przesłanie go na [OpenRadar] (http://openradar.appspot.com/). – Till

Odpowiedz

3

Po tym, jak jabłko chciało mi dać im próbkę błędu zgłoszonego przeze mnie w iOS-7, stwierdziłem, że nie naciskałem kontrolera Widok raczej dodawałem widok do okna. W takich przypadkach inny widok Kontrolery otrzymują zdarzenia orientacji, ale podklasa MPMoviePlayerViewController nie tylko przedstawiłem kontroler widoku zamiast dodawać jego widok i działało.

0

Te metody rotacji zmieniona w systemie iOS 6 musisz dodać metody obracania iOS 6 do kontrolera widoku:

- (BOOL)shouldAutorotate { 
    return YES: 
} 

- (NSUInteger)supportedInterfaceOrientations { 
    return UIInterfaceOrientationMaskAllButUpsideDown; 
} 

Musisz dodać Supported interface orientations z obsługiwanymi orientacjami do swoich aplikacji info.plist.

Z informacji iOS 6.0 release:

Klasa UIViewController ma nowe interfejsy wspierające następujące zachowań:

  • Nowe interfejsy zapewniają wyraźniejszy ścieżkę do zarządzania i śledzenia obrotów interfejsu.
+0

ale działa dobrze na iOS6, a także w iOS7 na iPadzie –

+1

Również w informacji. wszystkie orientacje ekranu są dozwolone z wyjątkiem "UIInterfaceOrientationPortraitUpsideDown" –

+0

Od wersji iOS 6, jeśli nie implementujesz ['shouldAutorotate'] (https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIViewController_Class/Reference/ Reference.html # // apple_ref/doc/uid/TP40006926-CH3-SW124) przyjmowana jest wartość "TAK". Następnie, jeśli rotacja jest zgodna z którąkolwiek z obsługiwanych form rotacji, 'info.plist' widok jest po prostu obrócony. jeśli zastosujesz powyższe metody, twoja klasa podrzędna 'MPMoviePlayerViewController' znów się obróci. – rckoenes

1

Spróbuj tego rozwiązania:

Do AppDelegate.h:

@property (nonatomic, assign) BOOL *fullScreenVideoIsPlaying; 

Do 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; 
    }} 

Do ViewController:

w Metodzie 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]; 

i dodać te dwie metody w tej samej klasie:

-(void) movieStarted:(NSNotification*) notif { 
    myDelegate.fullScreenVideoIsPlaying = YES; 
} 
-(void) youTubeFinished:(movieFinished*) notif { 
    myDelegate.fullScreenVideoIsPlaying = NO; 
} 
0

myślę obrót urządzenie jest zablokowane w centrum sterowania, bo to działa prawidłowo w ios ipad 7.

Powiązane problemy