UIWebView
でビデオプレーヤーへのポインタを取得するためには公共のAPIメソッドがありません:
理想的には私はこのような何かを行うことができます。
ただし、ビデオプレーヤーにアクセスするのは安全ではありません。リフレクションを使用して、UIWebView
のサブビューを反復処理し、プレイヤーを見つけることを試みることができます。
- (UIView *)getViewInsideView:(UIView *)view withPrefix:(NSString *)classNamePrefix {
UIView *webBrowserView = nil;
for (UIView *subview in view.subviews) {
if ([NSStringFromClass([subview class]) hasPrefix:classNamePrefix]) {
return subview;
} else {
if((webBrowserView = [self getViewInsideView:subview withPrefix:classNamePrefix])) {
break;
}
}
}
return webBrowserView;
}
- (UIViewController *)movieControllerFromWebView:(UIWebView *)webview {
UIViewController *movieController = nil;
@try {
UIView *movieView = [self getViewInsideView:webview withPrefix:[NSString stringWithFormat:@"MP%@oView", @"Vide"]];
SEL mpavControllerSel = NSSelectorFromString([NSString stringWithFormat:@"mp%@roller", @"avCont"]);
if ([movieView respondsToSelector:mpavControllerSel]) {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
movieController = (UIViewController *)[movieView performSelector:mpavControllerSel];
#pragma clang diagnostic pop
}
}
@catch (NSException *exception) {
NSLog(@"Failed to get movieController: %@", exception);
}
return movieController;
}
このコードはYouTubeHacks.mから採用されています。 Appleが異なるのSDK(MPMoviePlayerController
、UIMovieView
、MPVideoView
、UIMoviePlayerController
、など)と、その選手オブジェクトの名前を変更する傾向があるよう
あなたの走行距離は異なる場合があります。私は参考としてMediaPlayer.framework private headersを見るだろう。
出典
2016-04-25 16:57:20
JAL
ボタンを全画面ビデオプレーヤーに追加する方が簡単でしょうか? – Edmund
@エドモンドどのようにこれをしますか?フルスクリーンプレーヤーの実装はAppleにはプライベートなので、基本的な実装を変更せずにすべてのプレーヤーに魔法のように "ボタンを追加"する方法はありません。 – JAL
私は 'UIWindowDidResignKeyNotification'イベントを使用して、そのウィンドウのコントローラのビューをループし、' addSubview(button) 'を使用していましたが、現在の' window 'のビューを見つける方法がわかりません。 – Edmund