2013-06-06 20 views
5

Próbuję odtworzyć film z YouTube wewnątrz UIWebView (zobacz poniższy kod).Problem z orientacją odtwarzacza YouTube na iOS 6

Wszystko działa poprawnie, ale odtwarzacz YouTube nie obsługuje zmian orientacji w systemie iOS 6. Cała moja aplikacja działa tylko w trybie portretu.

Jak mogę rozwiązać ten problem? Każda pomoc jest doceniana.

Kod używam jest poniżej:

- (void)viewDidLoad 

{   
    [super viewDidLoad]; 
    float width = 300.0f; 
    float height = 300.0f; 
    youTubeURL = @"http://www.youtube.com/embed/ZiIcqZoQQwg"; 
    UIWebView *wv = [[UIWebView alloc] init]; 
    wv.frame = CGRectMake(10, 80, width, height); 

    NSMutableString *html = [[NSMutableString alloc] initWithCapacity:1] ; 
    [html appendString:@"<html><head>"]; 
    [html appendString:@"<style type=\"text/css\">"]; 
    [html appendString:@"body {"]; 
    [html appendString:@"background-color: black;"]; 
    [html appendString:@"color: white;"]; 
    [html appendString:@"}"]; 
    [html appendString:@"</style>"]; 
    [html appendString:@"</head><body style=\"margin:0\">"]; 
    [html appendFormat:@"<embed id=\"yt\" src=\"%@\"", youTubeURL]; 
    [html appendFormat:@"width=\"%0.0f\" height=\"%0.0f\"></embed>", 300.0f, 300.0f]; 
    [html appendString:@"</body></html>"]; 
    [wv loadHTMLString:html baseURL:nil]; 
    [self.view addSubview:wv]; 
} 
+0

Czy próbujesz zmusić kontroler widoku gracza (pełny ekran kontrolera widoku wideo) do obrotu? A może odtwarzacz nie może być w pełni ekranowany i chcesz, aby "UIWebview" (lub raczej jego kontroler widoku) się obracał? –

+0

Próbuję obrócić kontroler widoku gracza, aby obrócić zgodnie z orientacją urządzenia. –

Odpowiedz

2

Jeśli potrzebujesz zarówno wsparcia w orientacji pionowej, jak i poziomej, musisz ustawić obsługiwane tryby aplikacji w "Cel" -> Podsumowanie -> "obsługiwane orientacje interfejsu".

Twój kod do załadowania odtwarzacza jest poprawny. Trzeba tylko dodać wsparcie orientacji.

Jeśli używasz automatycznego układu, sprawdź ograniczenia w Xib. Jeśli nie, ustaw ramki dla widoku WWW dla każdej zmiany orientacji, o czym wspomniał NiravPatel.

Jeśli chcesz tylko jeden kontroler widoku, aby obrócić, dodać to na wszystkich kontrolerach Widok:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOr‌​ientation { return NO; } 

Możesz powrócić YES na Viewcontroller które powinny obracać i nie zwraca na innych viewControllers.

+0

Jeśli to zrobimy, cała aplikacja będzie się obracać, prawda? Chcę tylko kontroler widoku, w którym odtwarzam wideo, aby obrócić, a nie całą aplikację. –

+0

musisz dodać obsługę orientacji interfejsu do całej aplikacji. a następnie możesz ograniczyć autoRotację w innych widokach. Sprawdź poniższy kod. Możesz zwrócić NO na innych viewControllers i YES na jednym widoku potrzebujesz ... - (BOOL) shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation) interfaceOrientation { return NO; } – BrianChristo

3

Co będzie trzeba zrobić to jak poniżej ...

Najpierw zrób jedno powiadomienie viewDidLoad która zostanie wywołana podczas obracania urządzenia ..

-(void)ViewDidLoad 
{ 
    [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; 
[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(rotate:) 
              name:UIDeviceOrientationDidChangeNotification 
              object:nil]; 
} 

teraz powiadomienie wywoła metodę o nazwie "obróć:", więc będziemy musieli wdrożyć tę metodę, jak poniżej.

#pragma mark - Rotate Screen Method 
- (void)rotate:(NSNotification *)n { 

switch ([[UIDevice currentDevice] orientation]) { 
    case UIDeviceOrientationLandscapeLeft: 
     yourwebview.transform = CGAffineTransformMakeRotation(M_PI/2); 
     yourwebview.frame = CGRectMake(0, 0, 768, 1024);//you can set any frame 
     break; 
    case UIDeviceOrientationLandscapeRight: 
     yourwebview.transform = CGAffineTransformMakeRotation(-M_PI/2); 
     yourwebview.frame = CGRectMake(0, 0,768, 1024);//you can set any frame 
     break; 
    case UIDeviceOrientationPortrait: 
     yourwebview.transform = CGAffineTransformIdentity; 
     yourwebview.frame = CGRectMake(0, 0, 768, 1024);//you can set any frame 
     break; 
    case UIDeviceOrientationPortraitUpsideDown: 
     yourwebview.transform = CGAffineTransformMakeRotation(M_PI); 
     yourwebview.frame = CGRectMake(0, 0, 768, 1024);//you can set any frame 
     break; 
    default: 
     break; 
    } 
} 

i to wszystko.

+0

Właściwie chcę obrócić widok, w którym odtwarzamy wideo (po naciśnięciu przycisku odtwarzania w ramce youtube i), aby obrócić zgodnie z orientacją urządzenia. –

+0

@AnoopK Czy znalazłeś rozwiązanie dla niego? –

Powiązane problemy