UIS-переключатель не работает анимацию во время анимации "onTintColor"

Я хочу анимировать "включенный" цвет UIS-переключателя и поддерживать его интерактивность без каких-либо компромиссов с анимацией включения / выключения. Вот что я попробовал:

  1. Метод анимации с продолжительностью UIView не работает, потому что хорошо... он не должен, 'onTintColor' не указан как свойство анимации UIView. Хорошо.

    mySwitch.onTintColor = UIColor.green
    
    UIView.animate(withDuration: 10) {
        mySwitch.onTintColor = UIColor.red
    }
    
  2. Следующий. Переход UIView с помощью метода view дает правильное визуальное поведение, однако при взаимодействии с переключателем нарушается стандартная анимация включения / выключения (см. GIF).

    UIView.transition(with: mySwitch, duration: 10, options: [.transitionCrossDissolve, .allowUserInteraction], animations: { 
        mySwitch.onTintColor = UIColor.red
    }) { completed in
    }
    
  3. CATransition дает то же поведение, что и нет. 2 (см. GIF).

    var transition = CATransition()
    transition.type = kCATransitionFade
    transition.duration = 10
    mySwitch.layer.add(transition, forKey: kCATransition)
    mySwitch.onTintColor = UIColor.red
    

через GIPHY

У кого-нибудь есть идеи, как я могу анимировать "onTintColor", не затрагивая анимацию по умолчанию вкл / выкл?

Единственный способ сделать это правильно - создать собственный переключатель?

1 ответ

По умолчанию взаимодействие с пользователем отключено во время анимации. Попробуйте использовать более длинную форму анимации UIView,

animate(withDuration:delay:options:animations:completion:)и передать в настройках .allowUserInteraction

Другие вопросы по тегам