6

次の埋め込みコードを使用して、YouTube ビデオを 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];

ビデオを再生すると、ポートレート モードでのみ再生され、ランドスケープ モードでは再生されません。これは「iframe」による制限ですか?これを回避する方法はありますか?

4

4 に答える 4

2

UIViewController も横向きに回転できる場合は機能するはずです。

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

ビデオを回転させる前に、UIViewController が回転できることをテストしてください。ビデオが画面に表示されていないときに UIViewController を回転させたくない場合は、次のようにします。

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    if(webView && webView.superView) return YES;
    return UIInterfaceOrientationIsPortrait(interfaceOrientation);
}
于 2012-07-02T01:43:18.413 に答える
0

UIViewController で、そのビューを webView に設定します。

[self setView:webView];

WebView は、ルート ビュー コントローラーに送信されたローテーション メッセージを受信して​​いません。addChildViewControllerwebView 専用の別の View Controller を作成した場合にも、このメソッドを使用できます。

于 2012-07-02T01:47:38.867 に答える
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];
}
于 2012-07-08T13:29:32.657 に答える
0

これは、先ほど回答した別の質問とほぼ同じです。アプリの再開後に通知センターの向きを修正する

YouTube ビデオには、それらを表示する独自の UIViewController サブクラスがあります。-(BOOL)shouldAutorotateToInterfaceOrientation; は実際には実装されていません。(私は知っています)したがって、現在の向きを使用してください。

アプリが横向きに回転しない場合は、横向きにもなりません。[UIApplication sharedApplication].statusbarOrientation を設定すると、Youtube ビデオの向きを設定する必要がありますが、Michael Frederick の提案 (同様に) を実装するのではなく、これだけを行うことを選択した場合、ビデオから出てくるときに異常な効果が生じる可能性があります ( UI の縦向きですが、UI をカバーする統計バーの横向き)。

于 2012-07-07T14:04:48.287 に答える