我正在使用 Swift 为 iOS 8 编写自定义键盘扩展,但在实现 Swype 风格的涂鸦覆盖时遇到了问题。现在,我的键盘有一个基本的 UIView
(我的 UIInputViewController
的 view
属性),它有许多 UIButtons
对应于键盘上的键。这些键中的每一个都响应 touchUpInside
事件,并且具有 UISwipeGestureRecognizers
,可在向上或向下滑动时输入辅助字符。我重写了 touchesBegan:withEvent:
以将我的涂鸦覆盖 View 添加为 subview ,并覆盖了 touchesEnded:withEvent:
以删除我的 UIInputViewController中的涂鸦覆盖 View
。
目前,如果我尝试从按钮之间的一些间距开始涂鸦,涂鸦叠加 View 会正确显示。但是,如果我从 UIButton
开始涂鸦,UIButton
会捕获触摸事件并且不会将其转发到我的 UIInputViewController
。
如果用户在按钮之间涂写,我如何实现我的键盘,以显示我的涂写覆盖 View ,否则处理按钮按下/滑动?
--编辑--
我试图通过重写 touchesBegan/Moved/Ended/Cancelled
方法将事件转发给下一个响应者来解决这个问题。如果我点击一个按钮然后点击另一个按钮,我可以在两者之间出现一个涂鸦。但是,我仍然无法在按钮上绘制任何东西作为按钮之间的涂鸦。谁有更好的主意?
--编辑 #2--
目前,我的 View 层次结构是这样设置的:
UIView
(来自 UIInputViewController
)
subview :我的所有按钮,然后是覆盖 subview 的 ScribbleView
。
如果我在我的 ScribbleView
上将 userInteractionEnabled
设置为 true,我可以让涂鸦出现在任何地方,无论开始位置如何,但我会失去我的按钮功能。
至于源代码,我一直在尝试各种配置来传递触摸事件等等,但是代码的主体可以在这里找到:https://github.com/Kamaros/ELDeveloperKeyboard .
最佳答案
我在这里猜测,因为我还没有尝试使用 UIInputViewControllers。但是如何子类化 UIButton,然后覆盖 touchesBegan:withEvent:
和 touchesEnded:withEvent:
方法,以便将这些事件转发到您的 UIInputViewController?
关于ios - 如何有条件地拦截触摸事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24857741/