优雅的方式实现按下并保持连续事件发射?

lms*_*lms 5 xcode objective-c ios

由于按住按钮,我经常需要触发一系列事件.想象一个+按钮增加一个字段:点击它会使它增加1,但点击并按住应该说每秒增加1,直到按钮被释放.另一个例子是按住音频播放器类型应用程序中的向后或向前按钮时的擦洗功能.

我通常采用以下策略:

  1. 上touchDownInside我建立与我所需的间隔重复的计时器.
  2. 在touchUpInside我无效并释放计时器.

但是对于每个这样的按钮,我需要一个单独的计时器实例变量,2个目标动作和2个方法实现.(这假设我正在编写一个通用类,并且不希望对同时触摸的最大数量施加限制).

是否有一种更优雅的方式来解决这个问题,我错过了?

ohh*_*hho 2

通过以下方式注册每个按钮的事件:

[button addTarget:self action:@selector(touchDown:withEvent:) forControlEvents:UIControlEventTouchDown];
[button addTarget:self action:@selector(touchUpInside:withEvent:) forControlEvents:UIControlEventTouchUpInside];
Run Code Online (Sandbox Code Playgroud)

为每个按钮设置tag属性:

button.tag = 1; // 2, 3, 4 ... etc
Run Code Online (Sandbox Code Playgroud)

在处理程序中,执行您需要的任何操作。通过标签识别按钮:

- (IBAction) touchDown:(Button *)button withEvent:(UIEvent *) event
{
     NSLog("%d", button.tag);
}
Run Code Online (Sandbox Code Playgroud)