ViewController.Swiftでは、ボックスをある点から別の点にアニメーション化することができました。これをループするのは簡単だと思ったので、ボックスが1つのポイントにアニメーション化され、元の位置にアニメーション化されてから再びループされます。私はオブジェクトをある位置に移動し、「完全な」状態で再び移動することができましたが、それはループしません。どうすればこれを達成できますか?
私はこれがうまくいくかもしれないと思ったが、正直なところ私は知らない:
let boxmoves = [CGRect(x: 120, y: 220, width: 100, height: 100), CGRect(x: 120, y: 120, width: 100, height: 100)]
for boxmove in boxmoves {
coloredSquare.frame = boxmove
}
デバイスの幅に基づいてどのように中央に配置できますか?
私のコード:
let coloredSquare = UIView()
coloredSquare.backgroundColor = UIColor.blueColor()
coloredSquare.frame = CGRect(x: 120, y: 120, width: 100, height: 100)
self.view.addSubview(coloredSquare)
// found repeate but this will not animate as I want.
//UIView.animateWithDuration(2.0, delay: 0.2, options: UIViewAnimationOptions.Repeat, animations: {
UIView.animateWithDuration(2.0, animations: {
coloredSquare.frame = CGRect(x: 120, y: 220, width: 100, height: 100)
}, completion: { finished in
UIView.animateWithDuration(2.0, animations: {
coloredSquare.frame = CGRect(x: 120, y: 120, width: 100, height: 100)
})
})
完了ブロックアプローチを行う必要はありません。アニメーションオプション引数を使用するだけです。
Swift 3.に更新
UIView.animate(withDuration: 2.0, delay: 0, options: [.repeat, .autoreverse], animations: {
coloredSquare.frame = CGRect(x: 120, y: 220, width: 100, height: 100)
}, completion: nil)
何らかの理由でアニメーションを後で停止する場合は、次を使用します。
coloredSquare.layer.removeAllAnimations()
UIView.animate(withDuration: 3.0,
delay: 0.0,
options: [.curveLinear, .repeat],
animations: { () -> Void in
coloredSquare.frame = CGRect(x: 120, y: 220, width: 100, height: 100)
}, completion: { (finished: Bool) -> Void in
})