<環境>
Xcode 9.0.1
Objective-C
<解決したいこと>
Observerで値の監視をする
<本文>
ご覧いただきましてありがとうございます。
動画を再生させるアプリをMVMovieControllerを用いて開発していたのですが、
この度iOS11でAVViewControllerを使用することにしました。
KVOを用いた値の監視をしたいのですが、
Observerに登録できず困っています。
かなり古い記事ですが下記のURLを参考に実装していました。
stakoverflow: fullscreenの監視について
動作確認用に小さなプロジェクトも作ってみました。
AVPlayerViewController - sample project
以下、上記プロジェクト内のコード抜粋です。
Objectice
1- (void)viewDidLoad { 2 [super viewDidLoad]; 3 4 // set observer 5 [_videoView.playerVC.contentOverlayView addObserver:self 6 forKeyPath:@"bounds" 7 options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld 8 context:NULL]; 9 10 NSURL *url = [NSURL URLWithString:@"https://s3-ap-northeast-1.amazonaws.com/hls-sample/index.m3u8"]; 11 [_videoView createMoviePlayer:url]; 12} 13 14- (void)viewDidDisappear:(BOOL)animated { 15 [super viewDidDisappear:animated]; 16 [self removeObserver]; 17} 18 19#pragma mark - observer 20 21- (void)observeValueForKeyPath:(NSString *)keyPath 22 ofObject:(id)object 23 change:(NSDictionary<NSString *, id> *)change 24 context:(void *)context { 25 26 if (object == _videoView.playerVC.contentOverlayView) { 27 if ([keyPath isEqualToString:@"bounds"]) { 28 29 CGRect oldBounds = [change[NSKeyValueChangeOldKey] CGRectValue]; 30 CGRect newBounds = [change[NSKeyValueChangeNewKey] CGRectValue]; 31 BOOL wasFullscreen = CGRectEqualToRect(oldBounds, [UIScreen mainScreen].bounds); 32 BOOL isFullscreen = CGRectEqualToRect(newBounds, [UIScreen mainScreen].bounds); 33 34 if (isFullscreen && !wasFullscreen) { 35 NSLog(@"bocome fullscreen"); 36 } else if (!isFullscreen && wasFullscreen) { 37 NSLog(@"exited fullscreen"); 38 } 39 } 40 } 41}
iOS10未満だと期待通りの動作するのですが、
iOS11でのみ動かすことができていません。
何かしらヒント・アドバイスを頂けたら幸いです。よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/24 02:25
2017/10/24 05:21
2017/10/24 23:29