你知道当你按住方向键上的右键时马里奥是如何一直向右跑的吗?以同样的方式,我希望我的 UIButton 在它被按住的时间内持续触发它的动作。这对 UIButton 可行吗?如果不是,这是否可以通过以某种方式覆盖触摸处理方法来处理 UIImageView ?实际上,在尝试使用 UIButton 完成此操作之前,我有一些 UIImageViews(被安排用作 D-Pad),它们通过触摸处理方法进行检查,但事情开始变得混乱,所以我认为使用 UIButton 可以更轻松地完成此操作,因此切换了。任何知道如何识别连续、静止(不移动)向下触摸的人,请分享。
问问题
17537 次
4 回答
42
您也可以执行与上一个答案中显示的类似的操作,并且仍然使用 UIButton。
只需在“Touch Down”上启动计时器,然后在“Touch Up Inside”或“Touch Up Outside”上停止计时器。
就个人而言,我喜欢使用 UIButtons,因为它们提供了一些内置的视觉增强功能,您不必自己编写代码。
于 2009-06-15T18:01:25.910 回答
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;
}
}
这样,您可以以预定义的时间间隔重复事件,而不必依赖按钮,并获得您正在寻找的重复行为。注意 touchesMoved 触发器 - 如果他们移动手指,这将取消计时器,并且玩家停止移动。
于 2009-05-24T05:08:16.430 回答
2
对我来说,以下作品:
- 创建一个按钮。
- 在视图控制器或子类中创建 2 个方法(停止触摸并开始触摸)。
- 添加3 个控制事件。Touch Up Inside和Touch Drag Exit两者都采用停止触摸方法,Touch Down采用开始触摸方法。
- 当开始触摸方法调用时,我们应该以大约 0.2 的间隔启动一个 NSTimer(取决于您希望被调用的速度),重复 true 并作为选择器作为您想要调用的方法(拥有您想要的实际内容当用户点击按钮时执行)。
- 当停止触摸方法调用时,我们应该使计时器(
.invalidate()
)无效并将计时器分配为零。
就这样!
于 2015-11-26T08:35:19.113 回答
1
现在来点完全不同的东西:
ReactiveCocoa 6。
self.button.reactive
.controlEvents([.touchDown])
.observeValues { button in
SignalProducer.timer(interval: .milliseconds(500), on: QueueScheduler.main)
.take(until: button.reactive.controlEvents([.touchDragOutside, .touchDragExit, .touchUpInside, .touchUpOutside, .touchCancel]).map { _ in return })
.prefix(value: Date())
.startWithValues { date in
NSLog("\(date)")
}
}
于 2017-08-02T23:47:13.640 回答