2016-10-01 2 views
0

クロスディゾルブアニメーションを使用してボタンの背景の色を変更しようとしていますが、これを実行するたびに滑らかなトランジションではなく色が即座に変わります。代わりに、私はビューtransition前にそれを設定し、ビューのtransitionを開始し、それが完璧に動作しますしているbackgroundColorブロックanimationsに設定するのクロスディゾルブトランジションはただちに変更されます - Swift 3.0

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

答えて

3

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

出力

enter image description here

注:私はあなたがあなたが望む色ものを設定することができますbackgroundColorとしてred色を設定しています。

+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まで

このアプローチの欠点は、アニメーション処理中にテキストがまだ暗くなっていることです。これをオーバーライドする方法があるかもしれません(どのようにすばやく判断することができませんでした)ので、このソリューションの代わりの方法は、UIButtonの代わりにUILabelを使用し、クリックリスナーを設定することです。

また、別の方法として、UIButtonの背後にcustomLabelを配置し、ボタンをクリックしたときにラベル上でアニメーションを実行する方法もあります。このアプローチはやや「ハッキリ」と思われますが、ラベルがアニメートされている間はボタンが無効にされないため、迅速なシーケンシャルボタンのプレスを登録することができます(ボタンの目的はユーザーのログイン、この場合、これはおそらくあなたのために必要ではないでしょう)。

関連する問題