Objective c MPMoviePlauerViewController顶部的覆盖问题
我有一个电影播放器视图控制器,我想在上面添加一个覆盖视图 我使用了以下代码:Objective c MPMoviePlauerViewController顶部的覆盖问题,objective-c,ios,mpmovieplayer,Objective C,Ios,Mpmovieplayer,我有一个电影播放器视图控制器,我想在上面添加一个覆盖视图 我使用了以下代码: - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization [[movieP
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
[[moviePlayer view] addSubview:[self overlayControlsView]];
UIGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
[[self view] addGestureRecognizer:tap];
}
return self;
}
OverlyControlsView当前只是一个UILabel
- (void)handleTap:(UITapGestureRecognizer *)sender {
NSLog(@"Tap handled");
if ([sender state] == UIGestureRecognizerStateEnded) {
if ([[self overlayControlsView] isHidden]) {
[[self overlayControlsView] setHidden:NO];
} else {
[[self overlayControlsView] setHidden:YES];
}
}
}
当电影播放器刚刚显示时,点击它会导致OverlyControlsView成功显示和隐藏
但是,在moviewplayer加载状态更改并开始播放(我从Internet加载视频,因此这里有一些时间间隔)之后,handleTap方法就不再被调用了
有人知道吗?有没有更好的方法来添加覆盖控件?我不知道你的代码有什么问题;下面是一个使用自定义按钮实现覆盖控制的替代方法
- (void)viewDidLoad {
[super viewDidLoad];
NSString *urlString = [[NSBundle mainBundle] pathForResource:@"sample-video" ofType:@"mov"];
player = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL fileURLWithPath:urlString]];
UIButton *overlayView = [UIButton buttonWithType:UIButtonTypeCustom];
[overlayView setTitle:@"" forState:UIControlStateNormal];
[overlayView setTitle:@"Play" forState:UIControlStateSelected];
[overlayView addTarget:self action:@selector(handleTap:) forControlEvents:UIControlEventTouchUpInside];
player.view.frame = CGRectMake(50, 50, 200, 250);
overlayView.frame = player.view.frame;
[player.view addSubview:overlayView];
player.controlStyle = MPMovieControlStyleNone;
[self.view addSubview:player.view];
}
- (void)handleTap:(id *)sender {
UIButton *btn = (UIButton *)sender;
if (btn.selected) {
[player play];
[btn setSelected:NO];
}
else {
[player pause];
[btn setSelected:YES];
} }
我不知道你的代码有什么问题;下面是一个使用自定义按钮实现覆盖控制的替代方法
- (void)viewDidLoad {
[super viewDidLoad];
NSString *urlString = [[NSBundle mainBundle] pathForResource:@"sample-video" ofType:@"mov"];
player = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL fileURLWithPath:urlString]];
UIButton *overlayView = [UIButton buttonWithType:UIButtonTypeCustom];
[overlayView setTitle:@"" forState:UIControlStateNormal];
[overlayView setTitle:@"Play" forState:UIControlStateSelected];
[overlayView addTarget:self action:@selector(handleTap:) forControlEvents:UIControlEventTouchUpInside];
player.view.frame = CGRectMake(50, 50, 200, 250);
overlayView.frame = player.view.frame;
[player.view addSubview:overlayView];
player.controlStyle = MPMovieControlStyleNone;
[self.view addSubview:player.view];
}
- (void)handleTap:(id *)sender {
UIButton *btn = (UIButton *)sender;
if (btn.selected) {
[player play];
[btn setSelected:NO];
}
else {
[player pause];
[btn setSelected:YES];
} }
对不起,可能是我描述错了。但我想做的是在我点击播放器时显示/隐藏覆盖视图(想想默认控件和我的自定义覆盖视图,这样它们就会与默认控件一起淡入/淡出)。您的在顶部有一个按钮,单击它将播放/暂停视频,这不是我想要的。@PeterWong,播放/暂停只是显示覆盖控件的一个示例,我想您可以将其用于显示/隐藏覆盖视图。。。在MPMoviePlayerController视图上使用UIGestureRecognitor时,我也遇到了同样的问题。。选择了这种方式。所以它会是一个无形的按钮,在整个播放器的顶部等待点击?这看起来很棒。我明天会试一试。对不起,可能是我描述错了。但我想做的是在我点击播放器时显示/隐藏覆盖视图(想想默认控件和我的自定义覆盖视图,这样它们就会与默认控件一起淡入/淡出)。您的在顶部有一个按钮,单击它将播放/暂停视频,这不是我想要的。@PeterWong,播放/暂停只是显示覆盖控件的一个示例,我想您可以将其用于显示/隐藏覆盖视图。。。在MPMoviePlayerController视图上使用UIGestureRecognitor时,我也遇到了同样的问题。。选择了这种方式。所以它会是一个无形的按钮,在整个播放器的顶部等待点击?这看起来很棒。我明天要试试。