2012-06-29 14 views
6

Używam następujący kod do osadzenia osadzić moje filmy YouTube na iOSjak obrócić osadzone youtube video do trybie poziomym

- (NSString*)embedYouTube:(NSString*)youtube_id frame:(CGRect)frame { 
    NSString* embedHTML = @"\ 
    <html><head>\ 
    <style type=\"text/css\">\ 
    body {\ 
    background-color: transparent;\ 
    color: white;\ 
    }\ 
    </style>\ 
    </head><body style=\"margin:0\">\ 
    <iframe src=\"http://www.youtube.com/embed/%@?rel=0\" frameborder=\"0\" allowfullscreen width=\"%0.0f\" height=\"%0.0f\"></iframe>\ 
    </body></html>"; 
    NSString *html = [NSString stringWithFormat:embedHTML, youtube_id, frame.size.width, frame.size.height]; 

    return html; 
} 

//code to embed video 
NSString *contentHTML; 
if (currentAnswer.youtube_id != nil) { 
    contentHTML = [self embedYouTube:currentAnswer.youtube_id frame:CGRectMake(CELL_TEXT_LEFT_MARGIN + CELL_AVATAR_WIDTH + CELL_SPACING, currentYAxisValue, CELL_YOUTUBEVIEW_WIDTH, CELL_YOUTUBEVIEW_HEIGHT)]; 
} 

[webView loadHTMLString: contentHTML baseURL:nil]; 

Kiedy odtworzyć film, odgrywa jedynie w trybie potrait a nie trybie poziomym. Czy jest to ograniczenie ze względu na 'iframes', czy jest jakiś sposób obejścia tego?

Odpowiedz

2

Powinien działać, pod warunkiem, że kontroler UIViewController może również obracać się w poziomie.

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    return YES; 
} 

Sprawdź, czy Twój UIViewController może się obracać przed próbą obrócenia wideo. Jeśli nie chcesz, aby UIViewController aby móc obracać, gdy film nie jest wyświetlany na ekranie, można po prostu zrobić coś takiego:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    if(webView && webView.superView) return YES; 
    return UIInterfaceOrientationIsPortrait(interfaceOrientation); 
} 
+0

Ten kod nie istnieje w moim głównym UIViewController, w rzeczywistości widok sieciowy do gry youtube istnieje w uitableviewcell. W jaki sposób obsłużyć orientację uiwebview w użytecznej? – Zhen

+0

Nadal musisz umieścić ten kod w swoim UIViewControllerze (tym, który zawiera twoją UITable) –

0

W swojej UIViewController ustawić swój pogląd na Webview:

[self setView: webView];

Twoja strona internetowa nie otrzymuje komunikatów o rotacji wysłanych do kontrolera widoku głównego. Możesz także użyć metody addChildViewController, jeśli stworzysz osobny kontroler widoku wyłącznie dla twojego webView.

0

To jest prawie taki sam jak inne pytanie po prostu odpowiedział Fix Notification center orientation after the app resume execution

wideo YouTube mają tam własny UIViewController podklasę, która je prezentuje. W rzeczywistości nie implementują - (BOOL) powinnyAutorotateToInterfaceOrientation; (które znam) i dlatego używaj orientacji, w której się aktualnie znajdujesz.

Jeśli twoja aplikacja nie obraca się w krajobraz, to nie będzie też w krajobrazie. Ustawienie [UIApplication sharedApplication] .statusbarOrientation powinno ustawić orientację wideo YouTube, ale jeśli zdecydujesz się zrobić to tylko, a następnie wdrożyć sugestię Michael Frederick's (również), może to mieć pewne niezwykłe efekty po wyjściu z wideo (jak interfejs użytkownika portret, ale statystyki paskowe obejmujące interfejs użytkownika).

0
#define RADIANS(degrees) ((degrees * M_PI)/180.0) 

- (void) setTransformForCurrentOrientation { 
    UIDeviceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation; 
    NSInteger degrees = 0; 

    if (UIInterfaceOrientationIsLandscape(orientation)) { 
     if (orientation == UIInterfaceOrientationLandscapeLeft) { degrees = -90; } 
     else { degrees = 90; } 
    } else { 
     if (orientation == UIInterfaceOrientationPortraitUpsideDown) { degrees = 180; } 
     else { degrees = 0; } 
    } 

    rotationTransform = CGAffineTransformMakeRotation(RADIANS(degrees)); 

    [UIView beginAnimations:nil context:nil]; 
    [webView setTransform:rotationTransform]; 
    [UIView commitAnimations]; 
} 
Powiązane problemy