我希望能够在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];
有关如何在不访问私有属性的情况下实现此目的的任何想法?它甚至被允许了吗?我知道我可以使用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;
}
这有效地防止了回放控件出现在点击上,而我的singleTapGesture:按预期触发。但是,我现在遇到的问题是让播放控件出现在不同的手势上。 是否可以重新路由私人手势,或以编程方式模拟私人手势?
答案 0 :(得分:1)
为什么不先检查/修改目标/删除默认手势识别器?
您可以使用标准UIView
的{{1}}。
手势识别器可能隐藏在私人子视图中。
另一种解决方案是将gestureRecognizers
设置为userInteractionEnabled
并将您的手势识别器添加到超级视图或“叠加”透明视图。