【问题标题】:iOS 5.1 swipe gesture hijacked by UISplitViewController - how to avoid?iOS 5.1 滑动手势被 UISplitViewController 劫持 - 如何避免?
【发布时间】:2023-12-08 18:06:01
【问题描述】:

iOS 5.1 中与 UISplitViewController 应用程序相关的新行为似乎正在拦截 UISlider 运动,并产生不希望的结果。这也可能适用于UISegmented 控件和任何其他处理从左到右手势的控制界面。

使用纵向的UISplitView,主视图通常是隐藏的。从 iOS 5.1 开始,在屏幕上向右滑动会在设备左侧显示主视图。问题是,滑动 UISlider 控件的拇指被误解为屏幕滑动:如果我将 UISlider 拇指向右猛推,主面板就会弹出。

在我的应用中,调出主视图会产生不希望的副作用(和性能问题)。

我认为这种行为是 Apple 错误。任何想法如何解决它?我可以以某种方式让UISlider 捕获并处理它,而不将其传递到响应者链上吗?

提前感谢您的任何见解!

【问题讨论】:

  • 感谢@Dimitris Tavlikos。虽然我仍然相信 Apple 引入了一个错误(UISlider 等 UIControls 不应该在这个手势上与 UISplitViewController 竞争),但有一个简单的解决方法:splitViewController.presentsWithGesture = NO; // SplitView won't recognize right swipe 发布一个导致你突然找到答案的问题是什么?其他地方?
  • 如果我想在主控上保留默认手势功能但只在滑块移动时禁用它怎么办?将 presentsWithGesture 设置为 no 会在任何地方禁用手势。
  • 不会发生。滑块不会移动,因为手势在滑块开始移动之前被拦截。您不能只在滑块移动时禁用劫持,因为滑块甚至不会开始移动。这是一个很长的镜头,但可能有一种方法可以在处理之前拦截手势,然后确定它是否会启动滑块移动,并在这种情况下禁用劫持。但这很棘手。事件处理的层次结构对你不利,因为操作系统会首先破解手势。

标签: uisplitviewcontroller swipe-gesture ios5.1


【解决方案1】:

Apple 确认此问题与之前报告的错误重复,目前正在调查中(错误 ID#10170209)。

目前该解决方法似乎运行良好。

【讨论】:

    最近更新 更多