我希望在电影结束时显示电影播放器控件,所以我将观察者添加到NSNotificationCenter:
- (void)movieFinishedCallback:(NSNotification*)aNotification
{
// Obtain the reason why the movie playback finished
NSNumber *finishReason = [[aNotification userInfo] objectForKey:MPMoviePlayerPlaybackDidFinishReasonUserInfoKey];
if ([finishReason intValue] == 0)
{
[self showControls];
}
// Handle other reasons
}
- (void)showControls
{
for(id views in [[[self.playerVC moviePlayer] view] subviews]){
for(id subViews in [views subviews]){
for (id controlView in [subViews subviews]){
[controlView setAlpha:1.0];
[controlView setHidden:NO];
}
}
}
}
直到现在,每件事情都运转良好并且出现了控件,但是当我点击屏幕以隐藏它们时,控件消失并再次快速出现(像闪光灯一样),然后我需要再次点击查看以隐藏控件..
有谁知道我为什么会遇到这个问题?还是有另一个想法,在视频结束时显示控件?
答案 0 :(得分:0)
首先调试并打印MPMoviePlayerView的子视图,然后记下子视图并找到控件视图的名称。
这是我在我的应用程序中进行的调试。
Printing description of subViews:
<MPVideoContainerView: 0x7f936950f6e0; frame = (0 0; 375 667); autoresize = W+H; layer = <CALayer: 0x7f936950fa30>>
Printing description of controlView:
<MPVideoPlaybackOverlayView: 0x7f9369659a70; frame = (0 0; 375 667); alpha = 0; hidden = YES; autoresize = W+H; tag = 1004; layer = <CALayer: 0x7f93696c4710>>
Printing description of subViews:
<MPVideoContainerView: 0x7f936950f6e0; frame = (0 0; 375 667); autoresize = W+H; layer = <CALayer: 0x7f936950fa30>>
Printing description of views:
<MPSwipableView: 0x7f9369510290; frame = (0 0; 375 667); autoresize = W+H; gestureRecognizers = <NSArray: 0x7f9369510d30>; layer = <CALayer: 0x7f9369510620>>
然后我只是检查了控件视图的名称并将其从播放器中删除。将其设置为隐藏。
- (void)hideControls
{
for(id views in [[player view] subviews]){
for(id subViews in [views subviews]){
for (id controlView in [subViews subviews]){
if ( [controlView isKindOfClass:NSClassFromString(@"MPVideoPlaybackOverlayView")] ) {
[controlView setAlpha:0.0];
[controlView setHidden:YES];
}
}
}
}
}