我创建了一个UIBezierPath对象,我希望根据从Accelerometer接收的值在superview中移动。我试图玩UIView动画,我不太清楚我特别理解这段代码。
UIBezierPath对象的代码如下:
override func drawRect(rect: CGRect) {
let path = UIBezierPath(arcCenter: pathCenter, radius: pathRadius, startAngle: 0, endAngle: CGFloat(2*M_PI), clockwise: true)
UIColor.blueColor().setFill()
UIColor.greenColor().setStroke()
path.lineWidth = 2.0
path.fill()
path.stroke()
}
在ViewController中,我使用以下代码执行动画:
override func viewDidLoad() {
super.viewDidLoad()
UIView.animateWithDuration(0.5) { () -> Void in
//self.ballView.center.x += self.view.frame.width
}
print(self.ballView.center.x)
print(self.view.frame.width)
}
我面临的困惑是关于ballView和superview的尺寸(ViewController的视图)
此行self.ballView.center.x
返回187.5而self.view.frame.width
返回375.0,因此如果我执行注释的代码行,则self.ballView.center.x += self.view.frame.width
不应该将ballView的center.x
值设置为555.75并且因此在ViewControllers视图之外。相反,ballView位于self.view
的中心。请让我知道到底发生了什么。
答案 0 :(得分:2)
将动画移动到viewDidAppear
方法中。像这样:
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
UIView.animateWithDuration(0.5) {
self.ballView.center.x += self.view.frame.width
}
}