iOS以编程方式在中心添加图像视图

时间:2016-06-30 20:33:27

标签: ios swift cocoa autolayout

我尝试创建一个按钮面板,其中包含两行中的3个按钮。鉴于它不需要灵活,我试过

class MyViewController : UIViewController {
    @IBOutlet weak var buttonPanel: UIView! // auto layout, aligned to the bottom of screen
    var icon0: UIImageView!
    var icon1: UIImageView!
    ...
    var icon5: UIImageView!

    override func viewDidLoad() {
        super.viewDidLoad();
        icon0 = UIImageView(image: UIImage(named: "ic_smiley_gray.png"))
        icon1 = UIImageView(image: UIImage(named: "ic_smiley_gray.png"))
        // ...
        icon5 = UIImageView(image: UIImage(named: "ic_smiley_gray.png"))
        let icons = [icon0, icon1, ..., icon5]

        let btnCellW = CGFloat(self.view.bounds.width) / 3.0
        let btnCellH = buttonPanel.frame.height / 2.0
        for j in 0..<2 {
            for i in 0..<3 {
                let rect = CGRect(x: btnCellW * CGFloat(i),
                              y: btnCellH * CGFloat(j),
                              width: btnCellW, height: btnCellH)
                let cell = UIView(frame: rect)
                cell.layer.borderWidth = 0.5
                cell.layer.borderColor = UIColor.grayColor().CGColor
                cell.layer.backgroundColor = UIColor(red: 0.85 + 0.15 * CGFloat(1 - i % 2), green: 0.85, blue: 0.85,
                                                 alpha: 1.0).CGColor
                buttonPanel.addSubview(cell)
                let ic = icons[i + j*3]
                ic.center = cell.center
                ic.layer.borderWidth = 0.5
                ic.layer.borderColor = UIColor.brownColor().CGColor
                NSLog("adding icon \(ic.image) at \(ic.center.x) x \(ic.center.y)")
                cell.addSubview(ic)
            }
        }

使用单元格正确绘制按钮面板,但只有第一个单元格具有图像,因此图像资源良好。其他细胞是空白的。我的问题是什么?

enter image description here

1 个答案:

答案 0 :(得分:4)

问题在于这一行:

ic.center = cell.center

这可能是正确的,因为视图的中心位于其超视图的坐标中。你正在搅拌苹果和橘子。您希望ic的中心在的超级视图中居中,而是将其放在相对于cell相对于cell的相同坐标处。 buttonPanel!因此,除了第一个之外的所有ic图像都在边界of their单元格之外_,因此是不可见的。

相反,找出cell 界限的中心并将ic的中心放在那里:即CGPoint(x:cell.bounds.width/2, y:cell.bounds.height/2)