如何在隐藏控件时仅捕获 MPMoviePlayerController 视图上的单击/点击?

Posted

技术标签:

【中文标题】如何在隐藏控件时仅捕获 MPMoviePlayerController 视图上的单击/点击?【英文标题】:How to capture only a single click/tap on a MPMoviePlayerController view while controls are hidden? 【发布时间】:2011-06-20 15:26:01 【问题描述】:

以前,I asked about how to capture any touch input on an MPMoviePlayerController's view when the MPMovieControlStyle is set to MPMovieControlStyleNone。有人建议我可以使用 UIGestureRecognizer 来执行此操作。

我能够以这种方式使用手势识别器捕获屏幕上的双击,但不能捕获单击。我用于此的代码如下:

///**********///
singleTapGestureRecognizer =
    [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleClickOnMediaView:)];
singleTapGestureRecognizer.numberOfTapsRequired = 1;
[self.moviePlayer.view addGestureRecognizer:singleTapGestureRecognizer];
[singleTapGestureRecognizer release];
///**********///

为什么我无法使用此代码捕获 MPMoviePlayerController 视图上的单击?它处理单击的方式有什么特别之处吗?

【问题讨论】:

可能是***.com/questions/6384607/…的欺骗 @Brad,这真的是同一个问题吗?它看起来像是我的后续行动。 @Michael - 在查看原始问题之后,我相信这基本上是在问同样的事情。这也可能是这里描述的情况:meta.stackexchange.com/questions/95833/…,第一个问题中给出的答案对于他们正在尝试做的事情是不可接受的。我会看看我是否可以将它编辑成一个不同的问题。 @Michael - 好的,我想我的措辞方式使其清楚并与原始问题分开。我错了,这里有一个新问题。 【参考方案1】:

我知道这是一个有点老的问题,但如果有人需要,这里有一个解决方案。 要在同一视图上处理单击和双击,单击识别器必须等待双击识别器失败。像这样的:

UITapGestureRecognizer* doubleTapRecon = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleDoubleTap)];
[doubleTapRecon setNumberOfTapsRequired:2];
[doubleTapRecon setDelegate:self];
[self.view addGestureRecognizer:doubleTapRecon];

UITapGestureRecognizer* singleTapRecon = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap)];
[singleTapRecon setNumberOfTapsRequired:1];
[singleTapRecon requireGestureRecognizerToFail:doubleTapRecon];
[singleTapRecon setDelegate:self];
[self.view addGestureRecognizer:singleTapRecon];

请注意,如果您不使用 ARC,则必须注意内存管理。

【讨论】:

【参考方案2】:

不,上述答案将无法获得单击手势,您必须实现“UITapGestureRecognizerDelegate”并使用该方法

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer

    return YES;

因为 'moviePlayer' 也使用轻击手势,所以要开始使用我们自定义的单次轻击,上述方法是必需的。

【讨论】:

以上是关于如何在隐藏控件时仅捕获 MPMoviePlayerController 视图上的单击/点击?的主要内容,如果未能解决你的问题,请参考以下文章

如何检测 iPhone MPMoviePlayer 控件何时出现/消失?

如何在需要时仅提交隐藏/显示字段数据之一 - Laravel

关于 MPMoviePlayer 控件样式

MPMoviePlayer默认控件按钮未对齐

如何使用 UISlider 在特定时间从 mpmovieplayer 听到声音?

MPMoviePlayer 控制样式条框高度