我正在使用一个UISplitViewController和一个详细视图控制器包含一个UIPanGestureRecognizer添加到它的视图.当我在细节视图控制器中滑动该视图时,识别手势,但是分割视图控制器的滑动手势识别器会干扰它; 显示主视图控制器,忽略细节控制器中的手势识别器.
shouldRecognizeSimultaneouslyWithGestureRecognizer从UIGestureRecognizerDelegate显示两个UIPanGestureRecognizer对象实现和调试方法 :一个来自详细视图控制器,另一个来自拆分视图控制器,所以我确定它们相互干扰.
当我presentsWithGesture = NO在拆分视图控制器上设置时,详细视图控制器内的手势识别器可以正常工作.但是这会禁用分割视图控制器上的手势识别器,因此它并不是解决问题的方法.
我也尝试在分割视图控制器上禁用手势识别器,只有当我需要其他手势识别器才能工作时,但似乎presentsWithGesture一旦分割视图控制器变得可见就无法设置.
我还尝试在分割视图控制器上禁用默认手势并添加我可以控制的自定义手势,但它不起作用.我尝试在手势上使用target和action拆分视图控制器按钮,但它不起作用.调用toggleMasterVisible:拆分视图控制器也不是一种选择,因为它是私有api的一部分.
有没有人对如何处理这个有任何建议?
我建议您UISplitViewController在需要其他手势工作时禁用平移手势。这应该可以做到:
for (UIGestureRecognizer* recognizer in [splitViewController gestureRecognizers]) {
if ([recognizer isKindOfClass:[UIPanGestureRecognizer class]]) {
[recognizer setEnabled:NO];
}
}
Run Code Online (Sandbox Code Playgroud)
您可能不想每次都搜索它,因此我会在加载视图时存储对该手势识别器的引用,然后根据需要禁用和启用:
在 viewDidLoad 上:
for (UIGestureRecognizer* recognizer in [splitViewController gestureRecognizers]) {
if ([recognizer isKindOfClass:[UIPanGestureRecognizer class]]) {
[self setSplitViewPanGesture:recognizer];
}
}
Run Code Online (Sandbox Code Playgroud)
之后:
[self.splitViewPanGesture setEnabled:NO];
Run Code Online (Sandbox Code Playgroud)
然后:
[self.splitViewPanGesture setEnabled:YES];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2033 次 |
| 最近记录: |