사용자가 AVPlayerViewController의 확장 아이콘을 누르면 어떻게 감지 할 수 있습니까? 동영상 재생이 전체 화면 모드로 전환되는 시점을 알고 싶습니다.AVPlayerViewController의 전체 화면 모드를 감지하는 방법
답변
AVPlayerViewController
인스턴스의 videoBounds
속성을 KVO를 사용하여 관찰 할 수 있습니다.
편집 되는 가장 기본적인 예를
[_myPlayerViewController addObserver:self forKeyPath:@"videoBounds" options:0 context:nil];
ChrisH 플레이어 상태를 얻기 위해 KVO를 등록하는 코드를 찾을 수 있지만 videoBounds 변경을 알리는 keyPath를 찾을 수없는 것 같습니다. [self.playerViewController.player addObserver : self forKeyPath : @ "status"옵션 : 0 context : nil]; - @ "상태"대신에 무엇을 사용합니까? –
@JohnStewart 당신은'playerViewController.player'의'status' 속성을 관찰하는 것에 대해 이야기하고 있습니다 .- playerViewController'의'videoBounds' 속성을 관찰 할 필요가 있습니다. – ChrisH
완벽하게 작동합니다; 고맙습니다. ChrisH 락! –
self.frameChecker = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(checkContetnOverlay) userInfo:nil repeats:YES];
-(void)checkContetnOverlay{
BOOL currentPlayerIsFullscreen = (self.avVideoPlayer.contentOverlayView.frame.size.width>1000 || self.avVideoPlayer.contentOverlayView.frame.size.height>1000);
//works with these values only for iPad
if (((PlayerViewController*)self.parentViewController).playerIsInfullScreen != currentPlayerIsFullscreen) {
if (currentPlayerIsFullscreen) {
NSLog(@"CUSTOM PLAYER (av) : changed to fullscreen");
self.avVideoPlayer.showsPlaybackControls = YES;
}else{
NSLog(@"CUSTOM PLAYER (av) : changed to minimised");
self.avVideoPlayer.showsPlaybackControls = YES;
}
}
}
그것은 예를 들어, playerViewController.contentOverlayView
의 bounds
을 관찰하고 [UIScreen mainScreen].bounds
에 그 비교하는 것도 가능합니다 : 신속한에서
self.playerViewController = [AVPlayerViewController new];
// do this after adding player VC as a child VC or in completion block of -presentViewController:animated:completion:
[self.playerViewController.contentOverlayView addObserver:self forKeyPath:@"bounds" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:NULL];
...
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *, id> *)change context:(void *)context {
if (object == self.playerViewController.contentOverlayView) {
if ([keyPath isEqualToString:@"bounds"]) {
CGRect oldBounds = [change[NSKeyValueChangeOldKey] CGRectValue], newBounds = [change[NSKeyValueChangeNewKey] CGRectValue];
BOOL wasFullscreen = CGRectEqualToRect(oldBounds, [UIScreen mainScreen].bounds), isFullscreen = CGRectEqualToRect(newBounds, [UIScreen mainScreen].bounds);
if (isFullscreen && !wasFullscreen) {
if (CGRectEqualToRect(oldBounds, CGRectMake(0, 0, newBounds.size.height, newBounds.size.width))) {
NSLog(@"rotated fullscreen");
}
else {
NSLog(@"entered fullscreen");
}
}
else if (!isFullscreen && wasFullscreen) {
NSLog(@"exited fullscreen");
}
}
}
}
, 오디오 및 동영상 용 :
는 viewDidLoad에, 또는 didMoveToSuperview로 초기화 기능이 관찰자를 추가
//Observe if player changed bounds and maybe went to fullscreen
playerController.contentOverlayView!.addObserver(self, forKeyPath: "bounds", options: NSKeyValueObservingOptions.New, context: nil)
및 클래스에이 기능 :
override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
if keyPath == "bounds" {
let rect = change!["new"] as! NSValue
if let playerRect: CGRect = rect.CGRectValue() as CGRect {
if playerRect.size == UIScreen.mainScreen().bounds.size {
print("Player in full screen")
isVideoInFullScreen = true
} else {
print("Player not in full screen")
}
}
}
}
'new 대신'NSKeyValueChangeKey.newKey'를 사용하십시오 – gbk
iOS 11에서 전혀 호출되지 않습니다 – karthikeyan
스위프트 2.2 만들고 AVPlayerViewController의 서브 클래스를 사용합니다.
class YouVideoPlayer: AVPlayerViewController {
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
if view.bounds == contentOverlayView?.bounds {
//code
}
}
- 1. GTK +/GTK에서 전체 화면 모드를 전환하는 방법 #
- 2. 터치 스크린에서 전체 화면 모드를 종료하는 방법
- 3. Expression Blend에서 전체 화면 모드를 종료하는 방법
- 4. Modernizr : 전체 화면 API를 감지하는 방법
- 5. StageDisplayState에서 전체 화면 모드를 사용할 수 없습니다.
- 6. IE8 호환 모드를 감지하는 방법
- 7. OSX에서 안전 모드를 감지하는 방법
- 8. 전체 화면 모드를 활성화하는 방법은 무엇입니까?
- 9. 크롬에서 전체 화면 모드를 종료하지 못하게하기
- 10. 플렉스에서 전체 화면 모드를 보는 방법은 무엇입니까?
- 11. TYPE_KEYGUARD는 전화를 걸면 전체 화면 모드를 유지합니다.
- 12. 신뢰할 수있는 응용 프로그램에서 ESC가 전체 화면 모드를 종료하는 방법?
- 13. 플래시 전체 화면 모드를 감지하고 자바 스크립트로 이탈하는 방법
- 14. Powershell ISE 4.0에서 전체 화면 모드를 활성화하는 방법
- 15. 전체 화면 모드를 설정했지만 전체 화면으로 그릴 수 없음
- 16. [FireFox] [HTML5 FullScreen API] 사용자가 '허용'버튼을 클릭하여 전체 화면 모드를 허용하는지 여부를 감지하는 방법은 무엇입니까?
- 17. sprint/verizon/kddi iphone4s 모드를 감지하는 방법
- 18. 확장 배경에서 시크릿 모드를 감지하는 방법
- 19. iPhone/iOS 6/Mobile Safari : "브라우저 전체 화면"모드를 감지하는 방법이 있습니까? Android 호환성?
- 20. 안드로이드 화면 압력을 감지하는 방법?
- 21. STAMINA 모드를 감지하는 방법은 무엇입니까?
- 22. HTML 5 전체 화면 사이트가 내부 링크에서 전체 화면 모드를 종료합니다.
- 23. Windows에서 전체 화면 앱 종료 감지
- 24. 탐색 웹 사이트는 크롬에서 전체 화면 상태에있는 동안 전체 화면
- 25. Xcode 4 전체 화면 모드를 사용할 수 없습니다.
- 26. mpmovieplayer에서 전체 화면 모드를 종료하는 동안 응용 프로그램이 충돌합니다.
- 27. Youtube Video android webview에서 전체 화면 모드를 클릭하면 화면이 정지됩니다.
- 28. actionscript 3에서 전체 화면 모드를 구현하는 방법은 무엇입니까?
- 29. 하위 창 전체 화면 모드를 표시하는 방법은 무엇입니까?
- 30. jQTouch 응용 프로그램에서 전체 화면 모드를 요구하는 방법은 무엇입니까?
여기에 스위프트 코드가 있습니까? – Piraba