Swift如何在保持居中的同时为屏幕制作动画,但也缩小了尺寸

时间:2016-05-22 19:22:07

标签: swift swift2

我想做一个简单的动画,其中徽标从尺寸为1的屏幕上的A点移动到屏幕上尺寸为2的B点

我找到了

self.logoOutlet.frame = CGRect(x: x, y: y, width: 115, height: 115)

如何获得它,无论手机的大小是多少,x都会居中?

3 个答案:

答案 0 :(得分:1)

您要么必须进行数学计算,要根据x的{​​{1}}的范围来计算superview的值,要么使用AutoLayout并使用中心X约束(这是可能是更好的选择。)

您可以阅读文档中的详细信息:Auto Layout Guide,或使用您可以通过Google搜索找到的有关自动布局的众多教程之一。

答案 1 :(得分:0)

通过两个不同答案的组合,我找到了一个有效的解决方案

self.logoOutlet.frame = CGRect(x: self.view.frame.midX, y: 26, width: 115, height: 115)
self.logoOutlet.center.x = self.view.center.x

答案 2 :(得分:0)

以下是使用自动布局的示例:

@IBAction func animateLogo(sender: UIButton) {
    let newView = UIView()
    newView.backgroundColor = .redColor()
    newView.translatesAutoresizingMaskIntoConstraints = false

    self.view.addSubview(newView)

    let topConstraint = NSLayoutConstraint(item: newView, attribute: .Top, relatedBy: .Equal, toItem: view, attribute: .Top, multiplier: 1.0, constant: 500.0)

    let centerXConstraint = NSLayoutConstraint(item: newView, attribute: .CenterX, relatedBy: .Equal, toItem: view, attribute: .CenterX, multiplier: 1.0, constant: 0.0)

    let widthConstraint = NSLayoutConstraint(item: newView, attribute: .Width, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1.0, constant: 200)

    let heightConstraint = NSLayoutConstraint(item: newView, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1.0, constant: 200)

    NSLayoutConstraint.activateConstraints([topConstraint, centerXConstraint, widthConstraint, heightConstraint])

    self.view.layoutIfNeeded()

    // Now change the constraint for the second point
    widthConstraint.constant = 50
    heightConstraint.constant = 50
    topConstraint.constant = 50

    // Animate the move over 5 seconds
    UIView.animateWithDuration(5.0) {
        self.view.layoutIfNeeded()
    }
}

demo running in iOS simulator