我想我已经涵盖了stackoverflow中的大多数(如果不是全部)相关帖子。不幸的是我仍然无法找到答案。
基本上,我的应用包含一个UIWebview,可以通过(YouTube JS API)自动播放youtube视频
[webView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"YT_Player" ofType:@"html"] isDirectory:NO]]];
每x分钟调用包含这行代码的函数,其中x来自数据库。这是由
完成的[self performSelector:@selector(resetVideo) withObject:self afterDelay:x];
整个功能是这样的:
-(void) resetVideo {
[webView removeFromSuperview];
webView.delegate = nil;
[webView stopLoading];
[webView release];
webView = [[UIWebView alloc] initWithFrame:CGRectMake(12, 20, 300, 200)];
webView.delegate = self;
webView.userInteractionEnabled = NO;
webView.allowsInlineMediaPlayback = YES;
[webView setMediaPlaybackRequiresUserAction:NO];
[webView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"YT_Player" ofType:@"html"] isDirectory:NO]]];
[self.view addSubview:webView];
}
另外,在webViewDidFinishLoad:
中- (void)webViewDidFinishLoad:(UIWebView *)webView{
//call the javascript in YT_Player.html to set the video code, which comes
from the db as well
// done by using stringByEvaluatingJavaScriptFromString:scriptStr
}
当应用程序启动时,它总是播放youtube视频,然后当下一个视频尝试出现时,它只是在UIWebView区域显示为白色屏幕。此外,在我看来,这个问题只存在于真实设备中(而不是模拟器上)。
更多信息: 我定义了UIWebView * webView;在.h 我尝试实现像
这样的方法- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
但没有显示错误。
非常感谢任何建议。
编辑:经过进一步调查后,问题可能是由于没有触发onPlayerReady()事件。
答案 0 :(得分:0)
当你一遍又一遍地重新创建一个UIWebView时,我看到了一些奇怪的东西。而不是这样做,而是尝试拨打JavaScript function loadVideoById()
呢?要从Objective-C执行此操作,您可以调用:
[webView stringByEvaluatingJavaScriptFromString:"loadVideoById('kt2n27-pi_s')"];
为了在iOS应用中更轻松地嵌入iframe播放器,我们最近发布了helper library that you can install via CocoaPods。看看这个。我们提出的建议之一是,如果可以的话,不要一遍又一遍地重新创建UIWebView。
答案 1 :(得分:0)
您持有对webView对象的强引用,然后您从superView中删除该对象,因此白屏。您可以根据需要创建webView对象,而不是从超级视图中删除它,而不是保留强引用,您可以将其切换为隐藏& userInteractionEnabled属性。
没有强有力的参考:
- (void)resetVideo {
for (id_object in self.view.subview) {
if ([id_object isMemberOfClass: [UIWebView class]]) {
id_object = nil;
[id_object removeFromSuperView];
}
}
UIWebView* oWebView = [[UIWebView alloc] initWithFrame:CGRectMake(12, 20, 300, 200)];
// .. finish as you have above
}