のメイン ビューの中心に移動したいビューがありViewController
ます。を使用してこれを行いたいですUIView.animateWithDuration
。メソッドの完了ブロックで、2 番目のビューを追加したいと考えています。
ViewController
私のクラスのコードの下。ストーリーボードでビューをセットアップし、アウトレット経由で接続しました
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func viewDidAppear(animated: Bool) {
animation()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBOutlet weak var card: UIView!
func animation() {
print("viewCenter \(self.view.center)")
print("cardCenter 1 \(self.card.center)")
UIView.animateWithDuration(1.0,
delay: 2.0,
options: UIViewAnimationOptions.CurveLinear,
animations: { () -> Void in
self.card.center = self.view.center
print("number of constraints on card: \(self.card.constraints.count)")
},
completion: { finished in
print("cardCenter 2 \(self.card.center)")
let rect = CGRect(x: 200, y: 300, width: 50, height: 50)
let tempView = UIView(frame: rect)
tempView.backgroundColor = UIColor.blueColor()
self.view.addSubview(tempView)
self.view.layoutIfNeeded()
print("cardCenter 3 \(self.card.center)")
})
}
}
完了が実行される瞬間まで、アニメーションは正常に機能します。最初のビューは、アニメーションの前の最初の場所に表示されます。ただし、コンソールでは、ビューの中心の印刷された座標はメイン ビューの中心と一致します
コンソール出力
ビューセンター (160.0、284.0) カードセンター 1 (140.0、92.0) カードセンター 2 (160.0、284.0) カードセンター 3 (160.0、284.0)
完了ブロックに UIView を追加するときのこの動作を説明できる人はいますか?
編集
Chris のコメントに基づいて、制約card
と
self.view.layoutIfNeeded()
完了にいくつかのログを追加しました。コンソール出力にビューの初期座標が表示されるようになりました
新しいコンソール出力
viewCenter (160.0, 284.0)
cardCenter 1 (140.0, 92.0)
カードの制約数: 0
cardCenter 2 (160.0, 284.0)
cardCenter 3 (140.0, 92.0)