iPhone MPMoviePlayer 컨트롤이 나타나거나 사라질 때 감지하는 방법은 무엇입니까?
-
20-09-2019 - |
문제
MPMoviePlayerController보기 (OS 2.X 이상)에서 표준 되감기/재생/전방 컨트롤의 왼쪽과 오른쪽에 사용자 정의 버튼을 추가하려고합니다. 플레이어 창에 추가하는 방법을 알아 냈지만 항상 눈에 띄게 나타납니다. 표준 컨트롤이 나타나고 사라질 때 감지하는 방법이 있습니까?
해결책
좋아, 얻었다.
BOOL controlsVisible = NO;
for(id views in [[_moviePlayer view] subviews]){
for(id subViews in [views subviews]){
for (id controlView in [subViews subviews]){
controlsVisible = ([controlView alpha] <= 0.0) ? (NO) : (YES);
}
}
}
NSLog(@"player controls are visible: %d", controlsVisible);
어디에 _moveplayer 플레이어의 인스턴스입니다. 가장 깊은 루프에서 mpfullscreenvideooverlay 컨트롤이 숨겨져있는 경우 인스턴스 뷰에 알파 == 0.0 또는 컨트롤이 표시된 경우 알파 1.0이됩니다. 필요에 따라 관찰자를 추가하고 발사 할 수 있습니다. 나는 우아하지 않다는 것을 알고 있지만 애플 이이 과제와 관련하여 아무것도 기록하지 않았기 때문에 그것은 나에게 효과적이다.
건배 ...
다른 팁
Cybercow의 답변은 옳습니다. 답을 더 정확하게 만들기 위해 수정을 거의 추가해야합니다.
BOOL controlsVisible = NO;
for(id views in [[self.moviePlayerViewController view] subviews])
{
for(id subViews in [views subviews])
{
for (id controlView in [subViews subviews])
{
if ([controlView isKindOfClass:[UIView class]] && ((UIView*)controlView).tag == 1004)
{
controlsVisible = ([controlView alpha] <= 0.0) ? (NO) : (YES)
}
}
}
}
가장 내부 루프를 변경했습니다. 실제로 1004는 mpmovieplayer 컨트롤의 태그이므로보다 정확하게 작동합니다.
MovieControlmode 속성을 살펴보십시오. mpmoviecontrolmode를 설정할 수 있습니다
영화 재생 컨트롤을 표시하기위한 MPMoviecontrolmode 옵션.
typedef enum {
MPMovieControlModeDefault,
MPMovieControlModeVolumeOnly,
MPMovieControlModeHidden
}
mpmoviecontrolmode;
MPMoviePlayerscalingModedIdChangenotification을 확인할 수도 있습니다
사전 iOS3.2
"불쾌감"을 감지하는 것은 쉽습니다.
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(movieFinishedCallback:) name:MPMoviePlayerPlaybackDidFinishNotification object:moviePlayerController];
기타를 감지하는 것은 조금 더 어렵다 (아마도 더 나은 방법이있을 수 있음) :
...
[moviePlayerController play];
mainTimer = [NSTimer scheduledTimerWithTimeInterval:1/100 target:self selector:@selector(tick) userInfo:nil repeats:YES];
- (void)tick {
if( [[[UIApplication sharedApplication] windows] count] < 2 ) return;
moviePlayerWindow = [[[UIApplication sharedApplication] windows] objectAtIndex:1];
if( moviePlayerWindow ){
[mainTimer invalidate], mainTimer=nil;
// here you have moviePlayerWindow
}
}