iOS动画 - 视图应该在超级视图之外

时间:2016-03-10 04:26:57

标签: ios iphone swift cocoa-touch animation

我创建了一个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的中心。请让我知道到底发生了什么。

1 个答案:

答案 0 :(得分:2)

将动画移动到viewDidAppear方法中。像这样:

override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(animated)

    UIView.animateWithDuration(0.5) {
        self.ballView.center.x += self.view.frame.width
    }
}