我正在为Swift中的iOS 8编写自定义键盘扩展,我在实现Swype风格的涂鸦叠加层时遇到了麻烦。现在,我的键盘具有基座UIView
(view
的{{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。
答案 0 :(得分:0)
我猜这里,因为我还没有尝试使用UIInputViewControllers。但是如何对UIButton进行子类化,然后重写touchesBegan:withEvent:
和touchesEnded:withEvent:
方法以将这些事件转发到UIInputViewController?
答案 1 :(得分:0)
我认为您需要将ScribbleView interationEnabled设置为YES并转发到您不想要的touchEvents下面的按钮。例如,如果您在同一位置或点击时识别出长按,则表示用户想要按下该按钮。