Я нашел обходной путь, и это хорошо работает для меня.
Прежде всего, проблемы зависят от размера webView
, построенного внутри YTPlayerView
. Например, если у вас есть playerView 320x200, попробуйте принудительно настроить видео на 720hd, это не сработает, потому что класс проигрывателя iFrame youtube повторно переключается на лучшее разрешение в соответствии с размером вашего проигрывателя (в этом случае низкое качество, потому что у вас есть 320x200).
Вы можете увидеть этот ответ SO, объясняющий эту проблему.
Когда вы импортировали класс YTPlayerView
в свой проект, у вас есть два файла: YTPlayerView.h
и YTPlayerView.m
.
YTPlayerView.m (обновление для работы также на iPad)
Я изменил функцию, в которой веб-просмотр инициализируется с нестандартным размером (разрешение 4k), и в последнюю часть я добавил возможность масштабировать содержимое и восстанавливать исходный кадр, например:
- (UIWebView *)createNewWebView {
CGRect frame = CGRectMake(0.0, 0.0, 4096.0, 2160.0); //4k resolution
UIWebView *webView = [[UIWebView alloc] initWithFrame:frame];
//UIWebView *webView = [[UIWebView alloc] initWithFrame:self.bounds];
webView.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight);
webView.scrollView.scrollEnabled = NO;
webView.scrollView.bounces = NO;
if ([self.delegate respondsToSelector:@selector(playerViewPreferredWebViewBackgroundColor:)]) {
webView.backgroundColor = [self.delegate playerViewPreferredWebViewBackgroundColor:self];
if (webView.backgroundColor == [UIColor clearColor]) {
webView.opaque = NO;
}
}
webView.scalesPageToFit = YES;
if ( UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad )
{
CGSize contentSize = webView.scrollView.contentSize;
CGSize viewSize = self.bounds.size;
float scale = viewSize.width / contentSize.width;
webView.scrollView.minimumZoomScale = scale;
webView.scrollView.maximumZoomScale = scale;
webView.scrollView.zoomScale = scale;
// center webView after scaling..
[webView setFrame:CGRectMake(0.0, self.frame.origin.y/3, 4096.0, 2160.0)];
} else {
webView.frame = self.bounds;
}
[webView reload];
return webView;
}
Надеюсь, это поможет тем, кто попытается использовать оригинальный проигрыватель Youtube в своем проекте.
P.S.: все мои попытки были сделаны с быстрым проектом и следующими варами:
var playerVars:Dictionary =
["playsinline":"1",
"autoplay":"1",
"modestbranding":"1",
"rel":"0",
"controls":"0",
"fs":"0",
"origin":"https://www.example.com",
"enablejsapi":"1",
"iv_load_policy":"3",
"showinfo":"0"]
Использование функций:
self.playerView.load(withVideoId: "Rk6_hdRtJOE", playerVars: self.playerVars)
и следующий метод для принудительного разрешения:
self.playerView.loadVideo(byId: "Rk6_hdRtJOE", startSeconds: 0.0, suggestedQuality: YTPlaybackQuality.HD720)
Об iPad:
Как сообщил Эдвард в комментариях, на iPad была небольшая проблема, потому что эти устройства, похоже, не применяются scalesPageToFit
. Цель состоит в том, чтобы проверить, является ли устройство iPad, а затем масштабировать (уменьшить масштаб) scrollView
для размещения небольших границ представления. Я проверил на своем iPad Air, и он работает. Дай мне знать.
person
Alessandro Ornano
schedule
29.07.2017