1

我正在尝试在我正在制作的一个小合成器键盘上设置一个触摸事件,但我只能将一个“触地”事件连接到我制作的按钮上。

如何在按钮上设置“触摸”?因此,假设有人按下一个键并在其他按钮上滑动手指……您会期望其他键像钢琴一样在“触摸”上弹奏,对吗?不确定如何在 Interface Builder 中实现这一点。

任何帮助都会很棒-谢谢!肖恩

4

3 回答 3

2

您需要连接的不仅仅是 touchDown 事件。为了实现您想要的,您不仅需要通过“向下”事件来监听初始触摸,还需要让您的应用了解“移动”和“触摸”事件,以便您可以适当地响应用户移动他们的手指。更进一步,例如,通过将所有代码放在按钮子类中来尝试使每个按钮独立响应这些动作是很困难的。

相反,您需要创建一个可以同时查看所有按钮的单点代码,接收用户正在进行的触摸,并根据这些触摸做出要做什么的决定。这将是包含所有按钮的视图控制器的任务。

在此视图控制器中,您可以使用touchesBegan:touchesMoved:touchesEnded:方法。然后,您应该使用点击测试来检查触摸在哪些按钮上。查看convertPoint:,hitTest:withEvent:pointInside:withEvent:对按钮执行测试。

基本上在这些触摸方法中,您将跟踪何时按下新按钮touchDown:,何时触摸移动到 中的新按钮touchesMoved:,以及触摸刚刚来自哪个按钮,以及用户何时停止触摸touchesEnded:。通过将所有这些放在一起,您可以编写代码来跟踪每个手指的移动、它在哪个按钮上以及何时为这些按钮播放声音。

同样,我建议不要尝试将所有代码放在按钮操作的单个触摸处理程序中。相反,请使用您的视图控制器一次管理所有按钮之间的触摸。

希望这可以帮助。

于 2013-01-05T18:46:44.507 回答
0

你想看看 iOS 事件

http://developer.apple.com/library/ios/#documentation/EventHandling/Conceptual/EventHandlingiPhoneOS/EventsiPhoneOS/EventsiPhoneOS.html

http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIControl_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40006779-RH2-SW65

听起来您想要UIControlEventTouchDown在您当前按下按钮或区域时播放。相反,您可以使用UIControlEventTouchUpInsidewhich 在您抬起按钮或区域后播放。

就像是[results addTarget:self action:@selector(playSound) forControlEvents:UIControlEventTouchUpInside];

假设每次触摸都有相应的向下和向上动作。

如果您正在寻找类似把手放在钢琴上的东西,您可以尝试使用平移手势并跟踪滑动的位置。

于 2013-01-05T17:44:13.590 回答
0

查看UIControl 类参考 - UIControlEvents

你正在寻找UIControlEventTouchDown

//For example:
UIButton *myButon = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[myButon addTarget:self action:@selector(methodName) forControlEvents:UIControlEventTouchDown];
于 2013-01-05T17:46:53.730 回答