iphone - 嵌入式视频播放多个方向?

标签 iphone html objective-c uiwebview html5-video

我想在我的 UIWebView 控件中播放 dailymotion 和 youtube 视频。我正在使用以下嵌入式 html 代码来播放并且运行良好。但是当设备正在旋转时,它不会相应地重置,如果我再次调用以下代码,它将开始从头开始播放视频。

    NSString* embedHTML = @"<html><head><style>body {\"background-color:transparent;color:black;\"}</style></head><body style=\"margin:0\"><embed id=\"yt\" src=\"%@\"type=\"application/x-shockwave-flash\"width=\"%.0f\" height=\"%.0f\"></embed></body></html>";
    NSString* html = [NSString stringWithFormat:embedHTML, url, frame.size.width, frame.size.height];

是否有任何解决方案可以根据设备旋转重置我的 View 并继续播放而无需重新启动......?

编辑: 视频在播放模式下完美地改变了方向。一旦我停止它并尝试旋转 View ,webview 的内容就不会旋转。我正在寻找解决方案。

最佳答案

我已经为此制作了一个教程,其中还涉及界面方向的更改。

这是实现文件。只需将粘贴复制到您的 Controller 中,输入您的 URL 并尝试此代码

 #import "TestVideoViewController.h"
 #import "UICommonUtils.h"

@implementation TestVideoViewController
@synthesize TestVideoView;


- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    //sleep(10.0);
    [busyLoadingView hide:YES];
    //bShow = NO;
} 

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
{
    //sleep(10.0);
    [busyLoadingView hide:YES];
    //bShow = NO;
}

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
     //bShow = YES;
     //[busyLoadingView showWhileExecuting:@selector(showCursor:) onTarget:self withObject:nil animated:YES];

     //[busyLoadingView show:YES];
     return YES;
}

 - (void)webViewDidStartLoad:(UIWebView *)webView
{
    [busyLoadingView show:YES];
}

-(void)viewWillDisappear:(BOOL)animated
{
    [self embedVideo1:@"PASS HERE URL1" andVideo2:@"PASS HERE URL2" frame:self.view.frame];
}

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
       [super viewDidLoad];

    CGRect rectFrame = [UIScreen mainScreen].applicationFrame;

    self.view.frame = rectFrame;
    self.view.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
    self.view.autoresizesSubviews = YES;
    //TestVideoView.scalesPageToFit = YES;
//TestVideoView.backgroundColor = [UIColor clearColor];

    busyLoadingView = [[MBProgressHUD alloc] initWithView:self.view];


    // Add HUD to screen
    [self.view addSubview:busyLoadingView];

    busyLoadingView.labelText = @"Loading...";

    [self embedVideo1:@"PASS HERE URL1" andVideo2:@"PASS HERE URL2" frame:self.view.frame];

    //self.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
    //self.view.autoresizesSubviews = YES;

}

- (void)embedVideo1:(NSString*)url1 andVideo2:(NSString*)url2 frame:(CGRect)frame {  
        float videoWidth = 748.0;
    float videoHeight = 341.0;
    //int marginLeft = 10;
    //int marginTop = 10;

    if ([UICommonUtils isiPad]){
        videoWidth = 748.0;
        videoHeight = 341.0;
        //marginLeft = (int)(frame.size.width - videoWidth) /2;
        //marginTop = 10;
    } else {
        videoWidth = 300.0;
        videoHeight = 160.0;
        //marginLeft = 10;
        //marginTop = 10;
    }

    NSString* embedHTML = @" \
         <html><head> \
     <style type=\"text/css\"> \
     .style11 { \
     font-family:Arial,Helvetica,sans-serif; \
     font-weight:bold; \
     font-size:16; \
    } \
     .style12 { \
     width: \"%0.0f\"; \
     height=\"%0.0f\" \
     align = center; \
     } \
     .style21 { \
     font-family:Arial,Helvetica,sans-serif; \
     font-weight:bold; \
     font-size:16; \
     } \
     .style22 { \
     width: \"%0.0f\"; \
     height=\"%0.0f\" \
     align = center; \
     } \
     body {\
     background-color: transparent; \
     color: black; \
     } \
    </style> \
    </head><body> \
    <table> \
    <tr><td><span class=\"style11\">1) Collecting and Editing Leads</span></td></tr> \
    <tr><td height=20></td></tr> \
    <tr><td class=\"style12\"> \
    <embed id=\"yt1\" src=\"%@\" type=\"application/x-shockwave-flash\" width=\"%0.0f\" height=\"%0.0f\">  \
        </embed> \
    </td></tr> \
    <tr height=20></tr> \
    <tr><td><span class=\"style21\">2) Accessing Leads Online</span></td></tr> \
    <tr><td height=20></td></tr> \
    <tr><td class=\"style22\"> \
    <embed id=\"yt2\" src=\"%@\" type=\"application/x-shockwave-flash\" width=\"%0.0f\" height=\"%0.0f\">  \
    </embed> \
    </td></tr> \
    </table> \
       </body></html>";  
    NSString* html = [NSString stringWithFormat:embedHTML, videoWidth, videoHeight, videoWidth, videoHeight, url1, videoWidth, videoHeight, url2, \
                  videoWidth, videoHeight];  
    //NSString* html = [NSString stringWithFormat:embedHTML, videoWidth, videoHeight, videoWidth, videoHeight, url1, videoWidth-20, videoHeight, url2, \
    //                videoWidth-20, videoHeight];   
   /*
    if(videoView == nil) {  
        videoView = [[UIWebView alloc] initWithFrame:frame];  
        [self.view addSubview:videoView];  
    } */ 
    //[TestVideoView loadHTMLString:html baseURL:nil];  
    [(UIWebView *)self.view loadHTMLString:html baseURL:nil];  
}  


 // Override to allow orientations other than the default portrait orientation.
 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
     // Return YES for supported orientations
     //return (interfaceOrientation == UIInterfaceOrientationPortrait);
 //return YES;
    if([UICommonUtils isiPad]) return YES;
    else return NO;
}

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
    //CGRect rectFrame = [UIScreen mainScreen].applicationFrame;

    //self.view.frame = rectFrame;
    //NSLog([NSString stringWithFormat:@"origin x: %f origin y: %f width: %f height: %f", rectFrame.origin.x,
    //     rectFrame.origin.y, rectFrame.size.width, rectFrame.size.height]);

    //TestVideoView.frame = CGRectMake(rectFrame.origin.x, rectFrame.origin.y, rectFrame.size.height, rectFrame.size.width);    
 }

 - (void)didReceiveMemoryWarning {
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];

     // Release any cached data, images, etc that aren't in use.
}

- (void)viewDidUnload {
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}


- (void)dealloc {
     [super dealloc];
}


@end

这是ViewController的头文件

 #import <UIKit/UIKit.h>
 #import "MBProgressHUD.h"


 @interface TestVideoViewController : UIViewController<UIWebViewDelegate>{
    UIWebView *TestVideoView;
    MBProgressHUD *busyLoadingView;
    BOOL bShow;
}

@property (nonatomic, retain) IBOutlet UIWebView *TestVideoView;

- (void)embedVideo1:(NSString*)url1 andVideo2:(NSString*)url2 frame:(CGRect)frame;

@end

希望对您有所帮助。

如果您需要更多帮助,请告诉我。

编辑: 此代码很可能无法在模拟器上正常运行,因为模拟器没有 Shockwave-Flash 播放器

关于iphone - 嵌入式视频播放多个方向?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6909738/

相关文章:

javascript - 输入位置在 Iphone 上无法正确显示

iphone - Sencha Touch 2 中的 iPhone 上的 Google Chrome 无法使用停靠底部

iphone - 核心数据: Can't Use Previously Saved Object

javascript - 为响应式背景图像创建提示

javascript - 如何在 HTML Canvas 中不使用 charcode 静态声明字母

ios - 如何在 iPhone 上显示类似 HTML 的表格数据?

python - BeautifulSoup 代码给出了意想不到的结果(已编辑)

ios - 如何在新的 iOS8 框架目标中链接由 Cocoapods 生成的框架

iphone - unix 时间戳到几小时前

ios - 将图像发送到 SOAP 网络服务