tim*_*son 5 cocoa-touch objective-c avfoundation uigesturerecognizer ios
我希望能够在 AVKit 中使用新的 AVPlayerViewController 时更改播放控件的呈现方式。基本上,我想覆盖单指点击手势来做其他事情,并用双指点击替换该手势。我正在继承 AVPlayerViewController 以添加此功能。
我可以通过创建一个新的 UITapGestureRecognizer 来轻松添加双指点击,但通过单击执行此操作没有任何作用,因为播放控件仍然出现并且我的自定义手势方法未被调用。我假设是因为 AVPlayerViewController 有一个优先调用的手势。
我像往常一样设置手势......
// singleFingerTap: will never fire...
UITapGestureRecognizer *singleFingerTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleFingerTap:)];
singleFingerTap.numberOfTouchesRequired = 1;
singleFingerTap.delegate = self;
[self.view addGestureRecognizer:singleFingerTap];
// doubleFingerTap: will work correctly...
UITapGestureRecognizer *doubleFingerTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doubleFingerTap:)];
doubleFingerTap.numberOfTouchesRequired = 2;
doubleFingerTap.delegate = self;
[self.view addGestureRecognizer:doubleFingerTap];
Run Code Online (Sandbox Code Playgroud)
关于如何在不访问私有属性的情况下实现这一目标的任何想法?甚至允许吗?我知道我可以使用 AVPlayer 实例创建我自己的视图控制器,然后创建我自己的播放控件,但我希望我可以在这里使用轻量级 AVKit 播放器,并进行一些简单的修改。
我试过在 AVPlayerViewController 的视图中循环手势并删除它们,但gestureRecognizers 属性为空。即使我能做到这一点,我也不知道如何添加手势以在双指点击而不是单指点击上显示播放控件。
我们欢迎所有的建议!特别是这是否可能/允许。谢谢!
编辑: 我找到了一种方法来明确解除阻止我自己的手势的玩家的私人手势。
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
id firstGesture = gestureRecognizer;
id secondGesture = otherGestureRecognizer;
if ([firstGesture isKindOfClass:[UITapGestureRecognizer class]] && [secondGesture isKindOfClass:[UITapGestureRecognizer class]]) {
UITapGestureRecognizer *tapGesture = firstGesture;
UITapGestureRecognizer *otherTapGesture = secondGesture;
if (tapGesture.numberOfTapsRequired == otherTapGesture.numberOfTapsRequired && tapGesture.numberOfTouches == otherTapGesture.numberOfTouches) {
// Disable the single tap that shows the playback controls...
return YES;
}
}
return NO;
}
Run Code Online (Sandbox Code Playgroud)
这有效地防止了播放控件出现在点击时,并且我的 singleTapGesture: 按预期触发。但是,我现在遇到了让播放控件出现在不同手势上的问题。是否可以重新路由私有手势,或以编程方式模拟私有手势?
为什么不先检查/修改目标/删除默认手势识别器?
您可以使用标准UIView的gestureRecognizers.
手势识别器可以隐藏在私有子视图内。
另一个解决方案是将手势识别器设置userInteractionEnabled并NO添加到超级视图或“覆盖”透明视图。
| 归档时间: |
|
| 查看次数: |
3047 次 |
| 最近记录: |