Swift 2.2 - 以编程方式初始化UIImageView

时间:2016-08-02 08:45:00

标签: null uiimageview swift2 initialization

我对这个非常简单的代码(我从项目中分离出来)的失败感到不知所措。

import UIKit

class ViewController: UIViewController {

    weak var garageDoor: UIImageView!

    override func viewDidLoad() {
        super.viewDidLoad()

        if let image = UIImage(named: "garagedoorclosed") {
            print("image ready: \(image)")
            garageDoor = UIImageView(image: image)

            print("garageDoor: \(garageDoor)")

            garageDoor.frame = CGRectMake(0, 0, 560, 400) // fails here!
            view.addSubview(garageDoor)
        }
        else {
            print("image not ready!")
        }
    }

}

我只想用名为garagedoorclosed的图像初始化UIImageView。

我不知道为什么我没有使用garageDoor初始化garageDoor = UIImageView(image: image)

我的截图如下:

enter image description here

感谢任何评论!

由于

2 个答案:

答案 0 :(得分:1)

在viewDidLoad中只需替换下面的代码。

var garageDoor: UIImageView!

garageDoor = UIImageView(frame: CGRectMake(0, 0, 560, 400))
if let image = UIImage(named: "garagedoorclosed") {
    garageDoor.image = image
}

self.view.addSubview(garageDoor)

答案 1 :(得分:1)

我编辑我的答案。主要问题是garageDoor的声明,因为weak表示变量不保留对象,它将被释放。您已移除weakgarageDoor将会很强大。

var garageDoor: UIImageView!

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    if let image = UIImage(named: "images2") {
        print("image ready: \(image)")

        garageDoor = UIImageView(image: image)

        print("garageDoor: \(garageDoor)")

        garageDoor.frame = CGRectMake(0, 0, 560, 400) 
        view.addSubview(garageDoor)
    }
    else {
        print("image not ready!")
    }
}

根据经验确定两个参考文献中的哪一个应该是弱的:

  

将保留周期中的对象视为父子关系。在这种关系中,父母应该对其孩子保持强烈的参考(即所有权),但孩子不应该保持强有力的参考   original link