2017-10-04 8 views
0

標準のアニメーション関数を作成することで、アプリケーション全体で使用される繰り返しコードの冗長性を減らそうとしています。UIButtonアニメーションの拡張子

希望の結果は、オプションの完了ハンドラを持つボタンのアニメーションです。ここに私のコードは次のとおりです。MyViewControllerオン

extension UIButton { 
    func animate(duration: TimeInterval, completion: ((Bool) -> Swift.Void)?) { 
    UIView.animate(withDuration: duration, delay: 0.0, usingSpringWithDamping: 0.2, initialSpringVelocity: 6.0, options: [], animations: { 
     self.transform = .identity 
    }, completion: completion) 
    } 
} 

、私はこのようなアニメーションメソッドを呼び出すと、セグエが起こるが、アニメにはない:

myButton.animate(duration: 0.25) { _ in 
    self.performSegue(withIdentifier: "mySequeIdentifier", sender: sender) 
} 

私はセグエを確保するためにself.performSegueコメントアウトされましたストーリーボードに配線されていないことを確認し、そうでないことを確認します。

私もこのコードでアニメーション関数を宣言しようとした:

func animate(duration: TimeInterval, completion: @escaping (Bool)->Void?) { 
    UIView.animate(withDuration: duration, delay: 0.0, usingSpringWithDamping: 0.2, initialSpringVelocity: 6.0, options: .allowUserInteraction, animations: { 
     self.transform = .identity 
    }, completion: completion as? (Bool) -> Void) 
} 

そのコードを使用すると、何も起こりません。クラッシュさえありません。

ありがとうございます。あなたの提案は、私の誤りがどこにあるのかを歓迎します。

+0

遅延0.3秒を試してみてください。 – ankit

+0

同じ結果です。 Segueが起こる、アニメーションはしません。 – Adrian

答えて

3

拡張メソッドを呼び出す前に、ボタンに初期変換値を与えるのを忘れてしまったと思います。

myButton.transform = CGAffineTransform(scaleX: 1.2, y: 1.2) 
myButton.animate(duration: 0.25) { _ in 
    self.performSegue(withIdentifier: "mySequeIdentifier", sender: sender) 
} 
+0

ああ、少年...私の部分では驚くほど愚かな見落とし。ありがとうございました。 – Adrian

+0

ええ、それは時々起こる!! !!!!コーディングを楽しむ;) – ankit