0

Я пытаюсь изменить цвет кнопки при нажатии в течение 3 секунд. После того, как таймер достигнет 3-й секунды, изменение цвета является постоянным, но если пользователь отпускает кнопку до истечения времени, кнопка возвращается к исходному цвету. То, что я до сих пор это: в viewDidLoadКак изменить цвет UIButton при нажатии ТОЛЬКО и отменить изменение цвета, если оно выпущено до x секунд?

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 секунд, все возвращается к тому, как это было. Спасибо за вашу помощь заранее

ответ

2
использование

Сделать кнопки события нет необходимости использовать 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 переменные timer типа NSTimer и timeStarted типа int. Опорожните таймер на Touch Down и аннулируйте его на Touch Up Inside, а в Touch Up Inside метод действия получите общее время до тех пор, пока ваша кнопка не удерживается. Как показано в приведенном выше коде

Смежные вопросы