如何在仅按下时更改 UIButton 的颜色,如果在 x 秒之前释放则取消颜色更改?
How to change color of a UIButton while pressed ONLY and cancel color change if released before x amount of seconds?
我正在尝试让按钮在按下 3 秒时改变颜色。一旦计时器到达第 3 秒,颜色变化是永久性的,但如果用户在时间到之前释放按钮,按钮将恢复其原始颜色。我到目前为止是这样的:
在 viewDidLoad
UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc]
initWithTarget:self
action:@selector(fireSomeMethod)];
longPress.minimumPressDuration = 3.0;
[self.view addGestureRecognizer:longPress];
在 fireSomeMethod
我有
- (void)someMethod {
[UIView transitionWithView:self.button
duration:2.0
options:UIViewAnimationOptionCurveEaseIn
animations:^{
self.button.backgroundColor = [UIColor redColor];
}
completion:^(BOOL finished) {
NSLog(@"animation finished");
}];
}
这需要我按住按钮 3 秒才能触发动画,而动画本身需要 2 秒才能完成。期望的行为是动画在 longPress 开始时开始,我在 3 秒前释放按钮,一切都恢复到原来的状态。预先感谢您的帮助
利用按钮事件不用UILongPressGestureRecognizer
为您的按钮执行 2 个操作,一个用于 Touch Down
,另一个用于 Touch Up Inside
像这样
// For `Touch Up Inside`
- (IBAction)btnReleased:(id)sender {
[timer invalidate];
NSLog(@"time - %d",timeStarted);
}
// For `Touch Down`
- (IBAction)btnTouchedDown:(id)sender {
timer = [NSTimer scheduledTimerWithTimeInterval:1.0f
target:self
selector:@selector(_timerFired:)
userInfo:nil
repeats:YES];
timeStarted = 0;
}
- (void)_timerFired:(NSTimer *)timer {\
timeStarted++;
}
创建 2 个 NSTimer
类型的变量 timer
和 int
类型的 timeStarted
。在 Touch Down
上触发计时器并在 Touch Up Inside
上使它无效,然后在 Touch Up Inside
操作方法中获取总时间,直到您的按钮 hold.As 显示在上面的代码
我正在尝试让按钮在按下 3 秒时改变颜色。一旦计时器到达第 3 秒,颜色变化是永久性的,但如果用户在时间到之前释放按钮,按钮将恢复其原始颜色。我到目前为止是这样的:
在 viewDidLoad
UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc]
initWithTarget:self
action:@selector(fireSomeMethod)];
longPress.minimumPressDuration = 3.0;
[self.view addGestureRecognizer:longPress];
在 fireSomeMethod
我有
- (void)someMethod {
[UIView transitionWithView:self.button
duration:2.0
options:UIViewAnimationOptionCurveEaseIn
animations:^{
self.button.backgroundColor = [UIColor redColor];
}
completion:^(BOOL finished) {
NSLog(@"animation finished");
}];
}
这需要我按住按钮 3 秒才能触发动画,而动画本身需要 2 秒才能完成。期望的行为是动画在 longPress 开始时开始,我在 3 秒前释放按钮,一切都恢复到原来的状态。预先感谢您的帮助
利用按钮事件不用UILongPressGestureRecognizer
为您的按钮执行 2 个操作,一个用于 Touch Down
,另一个用于 Touch Up Inside
像这样
// For `Touch Up Inside`
- (IBAction)btnReleased:(id)sender {
[timer invalidate];
NSLog(@"time - %d",timeStarted);
}
// For `Touch Down`
- (IBAction)btnTouchedDown:(id)sender {
timer = [NSTimer scheduledTimerWithTimeInterval:1.0f
target:self
selector:@selector(_timerFired:)
userInfo:nil
repeats:YES];
timeStarted = 0;
}
- (void)_timerFired:(NSTimer *)timer {\
timeStarted++;
}
创建 2 个 NSTimer
类型的变量 timer
和 int
类型的 timeStarted
。在 Touch Down
上触发计时器并在 Touch Up Inside
上使它无效,然后在 Touch Up Inside
操作方法中获取总时间,直到您的按钮 hold.As 显示在上面的代码