【发布时间】:2018-04-16 10:01:23
【问题描述】:
所以标题几乎总结了我正在加载我的 YTPlayerView 的情况,如下所示:
[self.videoView loadWithVideoId:@"youtube id"];
就像documentation 中提到的那样,它运行良好,但是当我第二次点击视图时,视频有时会在 youtube 应用上打开,而不是全屏。
这里有什么帮助吗?
【问题讨论】:
标签: ios objective-c youtube-api
所以标题几乎总结了我正在加载我的 YTPlayerView 的情况,如下所示:
[self.videoView loadWithVideoId:@"youtube id"];
就像documentation 中提到的那样,它运行良好,但是当我第二次点击视图时,视频有时会在 youtube 应用上打开,而不是全屏。
这里有什么帮助吗?
【问题讨论】:
标签: ios objective-c youtube-api
经过大量研究,我没有找到这个问题的答案,所以我决定深入研究 YTPlayerView.m 文件,看看如何处理触摸事件,我发现有两种方法可以做到这一点:
1- YTPlayerView 包含一个 webView 和一个覆盖:
- (BOOL)webView:(UIWebView *)webView
shouldStartLoadWithRequest:(NSURLRequest *)request
navigationType:(UIWebViewNavigationType)navigationType
这是检查 url 方案以触发适当操作的完整代码
- (BOOL)webView:(UIWebView *)webView
shouldStartLoadWithRequest:(NSURLRequest *)request
navigationType:(UIWebViewNavigationType)navigationType {
if ([request.URL.host isEqual: self.originURL.host]) {
return YES;
} else if ([request.URL.scheme isEqual:@"ytplayer"]) {
[self notifyDelegateOfYouTubeCallbackUrl:request.URL];
return NO;
} else if ([request.URL.scheme isEqual: @"http"] || [request.URL.scheme isEqual:@"https"]) {
return [self handleHttpNavigationToUrl:request.URL];
}
return YES;
}
在我的例子中,这个函数 handleHttpNavigationToUrl 返回一个布尔值,指示视频是否应该在应用程序或 youtube 应用程序上打开。 我已经评论了这些在应用程序上打开视频的行,现在一切正常。
[[UIApplication sharedApplication] openURL:url];
return NO;
这是一个快速解决方案,我知道这不是一个好方法,但就我而言,我别无选择,但第二种解决方案要好得多。
2- 问题首先出在 youtube url 中,如果您使用的是嵌入 url,则不会出现此问题, 因此,请尝试使用其他方法通过嵌入 url 加载视频,其格式为:
http(s)://www.youtube.com/embed/[视频 ID]?[参数]
所以只需尝试使用 loadVideoByURL 并使用嵌入 url 而不是 loadWithVideoId。 瞧,我希望这会有所帮助。
【讨论】: