Cómo rotar video de YouTube incorporado al modo horizontal

Estoy usando el siguiente código de inserción para incrustar mis videos de YouTube en iOS

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

Cuando reproduzco el video, solo se reproduce en modo potrait y no en modo horizontal. ¿Es esta una restricción debido a los 'iframes'? ¿Hay alguna forma de evitar esto?

Debería funcionar siempre que su UIViewController también pueda rotar al paisaje.

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

Prueba que tu UIViewController puede girar antes de intentar girar el video. Si no desea que su UIViewController pueda rotar cuando el video no está en la pantalla, puede hacer algo como:

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

En su UIViewController, configure su vista en webView:

[self setView: webView];

Su webview no recibe los posts de rotation enviados al controller de vista raíz. También puede usar el método addChildViewController si realizó un View View Controller únicamente para su webView.

Esto es casi lo mismo que otra pregunta que acabo de responder, corregir la orientación del centro de notifications después de que la aplicación reanude la ejecución

Los videos de YouTube tienen su propia subclass UIViewController que los presenta. En realidad, no implementan – (BOOL) debería autorizar a la interfaz interna; (que yo sé) y, por lo tanto, usa la orientación que estés actualmente.

Si tu aplicación no gira a paisaje, tampoco estará en paisaje. Configurar la aplicación compartida UIApplication .statusbarOrientation debería establecer la orientación del video de YouTube; sin embargo, si decide hacer esto solo, en lugar de implementar la sugerencia de Michael Fnetworkingerick (también), podría tener algunos efectos inusuales al salir del video (como el Retrato de la interfaz de usuario pero el outlook de la barra de statistics cubre la interfaz de usuario).

 #define RADIANS(degrees) ((degrees * M_PI) / 180.0) - (void) setTransformForCurrentOrientation { UIDeviceOrientation orientation = [UIApplication shanetworkingApplication].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]; }