我正在为Swift中的一些练习组合一个自定义键盘。键盘上的按钮都具有比按钮框架本身更大的触摸区域。为此,我在自定义按钮类中添加了一个名为 touchFrame 的 CGRect 类型的变量。我会为我的所有实例手动设置 touchFrame 变量。然后我在 touchesBegan 中使用 CGRectContainsPoint 来确定是否触摸了任何 touchFrame 矩形。
这里我给了按钮实例一个值' touchFrame变量:
button01.touchFrame = CGRectMake(0.0, 0.0, 32.0, 59.0)
button02.touchFrame = CGRectMake(32.0, 0.0, 32.0, 59.0)
button03.touchFrame = CGRectMake(64.0, 0.0, 32.0, 59.0)
这是touchesBegan代码:
override func touchesBegan(touches: NSSet!, withEvent event: UIEvent!) {
var touchPoint: UITouch = touches.anyObject() as UITouch
characterButtonArray = [button01, button02, button03]
for button: CharacterButton in characterButtonArray {
if CGRectContainsPoint(button.touchFrame, touchPoint.locationInView(self.view)) {
characterButtonTouchInside(button)
}
}
}
在下图中,红线显示 touchFrame 矩形的区域,这是应该触发 characterButtonTouchInside(按钮)的区域,如上面的代码所示,但相反,该功能仅在您触摸按钮内时触发。框架(下图中的白色按钮)。
我不清楚为什么会这样。 keyboardViewController 是 UIInputViewController 的子类的事实会产生什么影响吗?
任何帮助都会非常感激。