我如何有条件地拦截触摸事件?

时间:2014-07-21 04:24:05

标签: ios uiview uibutton touch swift

我正在为Swift中的iOS 8编写自定义键盘扩展,我在实现Swype风格的涂鸦叠加层时遇到了麻烦。现在,我的键盘具有基座UIViewview的{​​{1}}属性),其中UIInputViewController对应键盘上的键。这些键中的每一个都响应UIButtons个事件,并且在向上或向下滑动时输入次要字符touchUpInside。我已覆盖UISwipeGestureRecognizers将我的涂鸦叠加层视图添加为子视图,并touchesBegan:withEvent:删除我touchesEnded:withEvent:中的涂鸦叠加层视图。

目前,如果我尝试从按钮之间的某些间距开始涂鸦,则可以正确显示涂鸦叠加视图。但是,如果我从UIInputViewController开始涂鸦,UIButton会抓住触摸事件,而不会将其转发到我的UIButton

如果用户在按钮之间涂鸦,但是处理按钮按下/滑动,我怎么能以这样的方式实现我的涂鸦覆盖视图呢?

- 编辑 -

我试图通过覆盖UIInputViewController方法将事件转发给下一个响应者来解决此问题。如果我点击一个按钮,然后点击另一个按钮,我可以在两者之间出现一个涂鸦。但是,我仍然无法在按钮上画任何东西作为按钮之间的涂鸦。任何人都有更好的主意吗?

- 编辑#2 -

目前,我的视图层次结构设置如下: touchesBegan/Moved/Ended/Cancelled(来自UIView) 子视图:我的所有按钮,然后我的UIInputViewController覆盖了子视图。

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

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

2 个答案:

答案 0 :(得分:0)

我猜这里,因为我还没有尝试使用UIInputViewControllers。但是如何对UIButton进行子类化,然后重写touchesBegan:withEvent:touchesEnded:withEvent:方法以将这些事件转发到UIInputViewController?

答案 1 :(得分:0)

我认为您需要将ScribbleView interationEnabled设置为YES并转发到您不想要的touchEvents下面的按钮。例如,如果您在同一位置或点击时识别出长按,则表示用户想要按下该按钮。