5

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

我通常采用以下策略:

  1. touchDownInside我设置了一个具有我想要的间隔的重复计时器。
  2. touchUpInside我使计时器无效并释放。

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

有没有更优雅的方法来解决我缺少的这个问题?

4

2 回答 2

2

我建议UILongPressGestureRecognizer

UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(addOpenInService:)];
    longPress.delegate      =   self;
    longPress.minimumPressDuration = 0.7;
    [aView addGestureRecognizer:longPress];
    [longPress release];
    longPress = nil;

在触发事件时,您可以接听电话

- (void) addOpenInService: (UILongPressGestureRecognizer *) objRecognizer
{
    // Do Something
}

同样,您可以UITapGestureRecognizer用于识别用户点击。

希望这可以帮助。:)

于 2012-11-06T12:31:44.127 回答
2

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

[button addTarget:self action:@selector(touchDown:withEvent:) forControlEvents:UIControlEventTouchDown];
[button addTarget:self action:@selector(touchUpInside:withEvent:) forControlEvents:UIControlEventTouchUpInside];

对于每个按钮,设置tag属性:

button.tag = 1; // 2, 3, 4 ... etc

在处理程序中,做任何你需要的事情。通过标签识别按钮:

- (IBAction) touchDown:(Button *)button withEvent:(UIEvent *) event
{
     NSLog("%d", button.tag);
}
于 2012-11-06T10:53:54.487 回答