如何在仅按下时更改 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 类型的变量 timerint 类型的 timeStarted。在 Touch Down 上触发计时器并在 Touch Up Inside 上使它无效,然后在 Touch Up Inside 操作方法中获取总时间,直到您的按钮 hold.As 显示在上面的代码