【问题标题】:How do I conditionally intercept touch events?如何有条件地拦截触摸事件?
【发布时间】:2014-09-11 12:34:47
【问题描述】:

我正在用 Swift 为 iOS 8 编写自定义键盘扩展,但在实现 Swype 风格的涂鸦覆盖时遇到了麻烦。现在,我的键盘有一个基本的UIView(我的UIInputViewControllerview 属性),其中有许多UIButtons 对应于键盘上的键。这些键中的每一个都响应touchUpInside 事件,并具有UISwipeGestureRecognizers 在向上或向下滑动时输入辅助字符。我已经覆盖了touchesBegan:withEvent: 以将我的涂鸦覆盖视图添加为子视图,并覆盖touchesEnded:withEvent: 以删除我的UIInputViewController 中的涂鸦覆盖视图。

目前,如果我尝试从按钮之间的一些间距开始涂鸦,涂鸦覆盖视图会正确显示。但是,如果我从UIButton 顶部开始涂鸦,UIButton 会捕获触摸事件并且不会将其转发给我的UIInputViewController

如何实现我的键盘,如果用户在按钮之间涂鸦,我的涂鸦覆盖视图会出现,但处理按钮按下/滑动?

--编辑--

我已尝试通过覆盖 touchesBegan/Moved/Ended/Cancelled 方法将事件转发给下一个响应者来解决此问题。如果我单击一个按钮,然后单击另一个按钮,我可以在两者之间出现一个涂鸦。但是,我仍然无法在按钮上绘制任何东西作为按钮之间的涂鸦。谁有更好的主意?

--编辑#2--

目前,我的视图层次结构是这样设置的: UIView(来自UIInputViewController) 子视图:我的所有按钮,然后是我的 ScribbleView 覆盖子视图。

如果我在 ScribbleView 上将 userInteractionEnabled 设置为 true,则无论起始位置如何,我都可以在任何地方出现涂鸦,但随后我失去了按钮功能。

至于源代码,我一直在尝试各种传递触摸事件的配置等等,但代码主体可以在这里找到:https://github.com/Kamaros/ELDeveloperKeyboard

【问题讨论】:

    标签: ios uiview uibutton touch swift


    【解决方案1】:

    我在这里猜测,因为我还没有尝试使用 UIInputViewControllers。但是如何继承 UIButton,然后覆盖 touchesBegan:withEvent:touchesEnded:withEvent: 方法以便将这些事件转发到您的 UIInputViewController?

    【讨论】:

    • 绝对是一个选项,虽然我不确定这将如何与我附加到每个按钮的手势识别器一起工作。不过值得一试,如果没有人想到更聪明的方法。
    • 既然您在按钮之间(而不是在按钮上)得到涂鸦,这不只是视图层次结构的问题吗?我的意思是,你不是在按钮本身下面画吗?同样,这只是一个猜测,因为我无权访问您的代码。或者,如果您喜欢杂乱无章,您可以随时在所有按钮上方放置一个空的 UIView 并在其上绘制,而不是在您现在绘制的任何地方绘制。
    【解决方案2】:

    我认为您需要将 ScribbleView interationEnabled 设置为 YES 并转发到您不想要的 touchEvents 下方的按钮。例如,如果您识别出在同一位置长按或点击,那么您就知道用户想要按下按钮。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多