如何在iOS中将对象置于屏幕中心

时间:2015-09-30 12:01:37

标签: ios cocoa-touch uiview uikit

如果我创建一个矩形对象,例如:

square = UIView(frame: CGRect(x: 100, y: 100, width: 300, height: 100))
square.backgroundColor = UIColor.redColor()
view.addSubview(square)

如何定位它,它始终以所有设备为中心?

2 个答案:

答案 0 :(得分:0)

不是直接用计算设置框架,而是必须在旋转下重新设置框架,这可以通过自动布局来完成。

这是一个完整而简单的视图控制器子类,它在其中心添加一个红色子视图,即使在旋转屏幕时也能工作。

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        setupSubview()
    }

    func setupSubview() {
        let square = UIView()
        square.translatesAutoresizingMaskIntoConstraints = false
        square.backgroundColor = .redColor()
        view.addSubview(square)

        let views = ["square" : square]
        let metrics = ["width" : 300, "height" : 100]

        view.addConstraints(
            NSLayoutConstraint.constraintsWithVisualFormat(
                "H:[square(width)]",
                options: [],
                metrics: metrics,
                views: views)
        )

        view.addConstraints(
            NSLayoutConstraint.constraintsWithVisualFormat(
                "V:[square(height)]",
                options: [],
                metrics: metrics,
                views: views)
        )

        view.addConstraints([
            NSLayoutConstraint(
                item: square,
                attribute: .CenterX,
                relatedBy: .Equal,
                toItem: view,
                attribute: .CenterX,
                multiplier: 1.0,
                constant: 0.0
            ),
            NSLayoutConstraint(
                item: square,
                attribute: .CenterY,
                relatedBy: .Equal,
                toItem: view,
                attribute: .CenterY,
                multiplier: 1.0,
                constant: 0.0
            )
        ])
    }

}

是的,这是很多代码,但它主要是样板 - 我只花了几分钟写这个例子。

如果您使用笔尖或故事板,这会变得更加容易。

答案 1 :(得分:0)

xAxis = superview.frame.size.width / 2 - x.frame.size.width / 2
yAxis = superview.frame.size.height / 2 - x.frame.size.height / 2