在压制和保持情况下使UIButton持续点火的方法?

Rex*_*ids 19 iphone cocoa-touch multi-touch uibutton

当你按住D-Pad上的右键时,你知道Mario是如何继续向右跑的吗?以同样的方式,我希望我的UIButton在按下它的持续时间内不断激活它的动作.这可能是UIButton吗?如果没有,是否可以通过以某种方式覆盖触摸处理方法来处理UIImageView?实际上,在尝试用UIButton完成之前,我有一些UIImageViews(安排作为D-Pad),通过触摸处理方法检查但事情开始变得混乱所以我认为这可以通过UIButton更容易完成,因此切换.任何知道如何识别连续,静止(未移动)向下触摸的人,请分享.

Bri*_*ont 42

您也可以执行类似于上一个答案中显示的内容,并仍然使用UIButton.

只需让定时器在"Touch Down"上启动,并让定时器停在"Touch Up Inside"或"Touch Up Outside"上.

就个人而言,我喜欢使用UIButton,因为它们提供了一些内置的视觉增强功能,您无需自己编写代码.

  • 需要明确的是,"Touch Up Inside"和"Touch Up Outside"事件都应配置为停止计时器. (9认同)

Cha*_*aos 32

不要使用按钮,使用多点触控和NSTimer:

在界面中创建一个视图本地NSTimer对象,然后使用它来启动/取消计时器

-(void)movePlayer:(id)sender {
   <Code to move player>
}

-(void)touchesBegan:(NSSet*)touches  withEvent:(UIEvent*)event {
    timer = [NSTimer scheduledTimerWithTimeInterval:0.3 target:self selector:@selector(movePlayer:) userInfo:nil repeats:YES];
}

-(void)touchesEnded:(NSSet*)touches  withEvent:(UIEvent*)event {
   if (timer != nil) 
      [timer invalidate];
      timer = nil;
}

-(void)touchesMoved:(NSSet*)touches  withEvent:(UIEvent*)event {
    if (timer != nil) {
       [timer invalidate];
       timer = nil;
    }
}
Run Code Online (Sandbox Code Playgroud)

这样,您可以按预定义的间隔重复事件,而不必依赖按钮,并获得您正在寻找的重复行为.注意touchesMoved触发器 - 如果他们移动手指,这将取消计时器,并且播放器停止移动.