2016-10-01 1 views
0

Я пытаюсь изменить цвет фона кнопки, используя анимацию с крестом, но всякий раз, когда я запускаю ее, она мгновенно меняет цвет вместо плавного перехода.Переход с перекрестного разворота сразу меняется - Swift 3.0

UIView.transition(with: self.SignIn, 
        duration:3, 
        options: UIViewAnimationOptions.transitionCrossDissolve, 
        animations: { self.SignIn.backgroundColor? = UIColor(hexaString: "#" + hex) }, 
        completion: nil) 

ответ

3

Вместо установки backgroundColor в animations блок я поставил перед видом transition, а затем начать transition зрения, и он будет работать отлично.

self.btnAnimate.backgroundColor = UIColor.red 
UIView.transition(with: self.btnAnimate, 
        duration: 3, 
        options: .transitionCrossDissolve, 
        animations: nil, 
        completion: nil) 

Выход

enter image description here

Примечание: Я поставил red цвет как backgroundColor вы можете установить, что когда-либо цвет вы хотите.

+0

Спасибо! Я проверю это, когда буду на своем ноутбуке. –

+0

Работает отлично! –

+0

Приветственный помощник :) –

0

Это происходит потому, что ваши анимации противоречат анимации кнопок по умолчанию.

Чтобы решить эту проблему, вы можете создать собственный класс дочернего UIButton:

import UIKit 

import UIKit 

class CustomButton: UIButton { 

    func animateButton(hex: String) { 

     // This block disables the default animations 
     UIButton.performWithoutAnimation { 

      // This is where you define your custom animation 
      UIView.transition(with: self, duration:3, options: UIViewAnimationOptions.transitionCrossDissolve, animations: { 
       self.backgroundColor? = UIColor(hexaString: "#" + hex) }, completion: nil) 

      // You must call layoutIfNeeded() at the end of the block to prevent layout problems 
      self.layoutIfNeeded() 
     } 
    } 

} 

Затем вызвать эту функцию:

signInButton.animateButton("ffffff") // Pass in your hex string 

Конечно, не забудьте изменить класс вашего loginButton на доске объявлений от UIButton до CustomButton.

Недостатком этого подхода является то, что в процессе анимации текст потемнеет. Возможно, есть способ переопределить это (я не смог быстро определить, как), поэтому альтернативный подход к этому решению - использовать UILabel вместо UIButton и установить прослушиватель кликов.

Или другой подход, который вы, возможно, захотите рассмотреть, помещает customLabel за UIButton и выполняет анимацию на ярлыке при нажатии кнопки. Хотя этот подход кажется несколько «взломанным», преимущество заключается в том, что кнопка не отключается во время анимации ярлыка, что означает, что вы можете регистрировать быстрые последовательные нажатия кнопок (хотя похоже, что цель вашей кнопки заключается в регистрации пользователя, в этом случае это, вероятно, не понадобится для вас).

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