ios - 通过滑动手指按下按钮(用于钢琴效果)

标签 ios objective-c

我正在创建一个类似钢琴的应用程序,其中每个按钮都会弹奏一个音符。我的 UIButtons 在 Touch Down 事件中播放声音。当我将手指从一个按钮滑动到另一个按钮时(想象一下用手指在钢琴键上滑动以捕获其间的所有音符)时出现问题,它仍然“按住”第一个按钮而不触摸另一个按钮,除非我抬起手指。

如何在不抬起手指的情况下捕获多个 Touch Down 事件?

最佳答案

您可以像这样向按钮添加其他目标:

myButton addTarget:self 
             action:@selector(yourMethodHere:withEvent: )
   forControlEvents:UIControlEventTouchDragInside];

这是您可以使用的事件类型的列表:

enum {
   UIControlEventTouchDown           = 1 <<  0,
   UIControlEventTouchDownRepeat     = 1 <<  1,
   UIControlEventTouchDragInside     = 1 <<  2,
   UIControlEventTouchDragOutside    = 1 <<  3,
   UIControlEventTouchDragEnter      = 1 <<  4,
   UIControlEventTouchDragExit       = 1 <<  5,
   UIControlEventTouchUpInside       = 1 <<  6,
   UIControlEventTouchUpOutside      = 1 <<  7,
   UIControlEventTouchCancel         = 1 <<  8,

   UIControlEventValueChanged        = 1 << 12,

   UIControlEventEditingDidBegin     = 1 << 16,
   UIControlEventEditingChanged      = 1 << 17,
   UIControlEventEditingDidEnd       = 1 << 18,
   UIControlEventEditingDidEndOnExit = 1 << 19,

   UIControlEventAllTouchEvents      = 0x00000FFF,
   UIControlEventAllEditingEvents    = 0x000F0000,
   UIControlEventApplicationReserved = 0x0F000000,
   UIControlEventSystemReserved      = 0xF0000000,
   UIControlEventAllEvents           = 0xFFFFFFFF
};

那么你可以有这样一个函数:

-(void) yourMethodHere:(UIControl *) button withEvent:(UIEvent *)event {
    //do whatever
}

关于ios - 通过滑动手指按下按钮(用于钢琴效果),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16995862/

相关文章:

ios - 无法将 Carthage 框架链接到 Xcode 项目

iphone - popViewController iphone

objective-c - 无法打开 .XIB 到另一个较低的系统版本

ios - 如何为@property 变量分配空间

ios - 如何获取所有字典键('LazyMapCollection<..>'错误)

android - Facebook SDK 仅在自己的时间轴上提要,不在 friend 的新闻提要上

iphone - 在同一 View Controller 中具有 TableView 的 ImageView

javascript - React-native 和 Firebase ListView 集成

c++ - 为 OS X 构建虚拟相机

ios - 如何在 AVPlayer IOS 中使用 URL 播放 youtube 视频?