web-dev-qa-db-ja.com

Swift animate WithDuration構文は何ですか?

古いアプリをXcode 7ベータ版に移植しようとしていますが、アニメーションでエラーが発生します。

'animateWithDuration'を '(Double、delay:Double、options:nil、animations:()-> _、completion:nil)'型の引数リストで呼び出すことはできません

コードは次のとおりです。

 UIView.animateWithDuration(0.5, delay: 0.3, options: nil, animations: {
      self.username.center.x += self.view.bounds.width
    }, completion: nil)

これはXcode 6で機能するため、これはSwiftのアップデートであると想定しています。だから私の質問は:

Swift animateWithDurationの3つの構文?

31
Dan Beaulieu

Swift 3/4構文

Swift 3構文の更新は次のとおりです。

UIView.animate(withDuration: 0.5, delay: 0.3, options: [.repeat, .curveEaseOut, .autoreverse], animations: {
    self.username.center.x += self.view.bounds.width
}, completion: nil)

完了ハンドラーを追加する必要がある場合は、次のようにクロージャーを追加します。

UIView.animate(withDuration: 0.5, delay: 0.3, options: [.repeat, .curveEaseOut, .autoreverse], animations: {
    // animation stuff      
}, completion: { _ in
    // do stuff once animation is complete
})

古い回答:

それは非常に簡単な修正であることがわかり、変更するだけでoptions: nilからoptions: []

Swift 2.2構文:

UIView.animateWithDuration(0.5, delay: 0.3, options: [], animations: {
      self.username.center.x += self.view.bounds.width
    }, completion: nil)

何が変わった?

Swift 2は、オプションセットの代わりにCスタイルのコンマ区切りオプションリストを削除しました( OptionSetType を参照)。最初の質問では、オプションにnilを渡しました。これはSwift 2.より前に有効でした。設定:[]

いくつかのオプションを持つanimateWithDurationの例は次のとおりです。

 UIView.animateWithDuration(0.5, delay: 0.3, options: [.Repeat, .CurveEaseOut, .Autoreverse], animations: {
      self.username.center.x += self.view.bounds.width
    }, completion: nil)
65
Dan Beaulieu

Swift 3、4、5

UIView.animate(withDuration: 1.5, delay: 0.05 * Double(index), usingSpringWithDamping: 0.8, initialSpringVelocity: 0, options: [], animations: {
    cell.transform = CGAffineTransform(translationX: 0, y: 0)
}, completion: nil)
4
emraz

完了ブロックを使用したSwift 3構文

UIView.animate(withDuration: 3.0 , delay: 0.25, options: .curveEaseOut, animations: {

        // animation
    }, completion: { _ in

        // completion
    })
3
Mr.Kushwaha

スイフト2

UIView.animateWithDuration(1.0, delay: 0.1, options: [.Repeat, .CurveEaseOut, .Autoreverse], animations: {
    // animation
}, completion: { finished in
    // completion
})

Swift 3、4、5

UIView.animate(withDuration: 1.0, delay: 0.1, options: [.repeat, .curveEaseOut, .autoreverse], animations: {
    // animation
}, completion: { finished in
    // completion
})
0