如何将图片添加到UIImageView?

4

我试图将图片添加到 UIImageView 中,但是在我这么做之后 UIImageView 为空。以下是我的代码:

    class ViewController: UIViewController {

    @IBOutlet var myView: UIView!
    @IBOutlet weak var testImg: UIImageView!
    override func viewDidLoad() {
        super.viewDidLoad()
        UIGraphicsBeginImageContext(CGSize(width: 500,height: 500))
                var path = UIBezierPath()
        path.lineWidth = 1.0
        path.moveToPoint(CGPoint(x: 150, y: 150))
        var x = 151
        for ;x<300;x++
        {
            path.addLineToPoint(CGPoint(x: x, y: x))
            path.moveToPoint(CGPoint(x: x, y: x))
        }
        path.stroke()
        let img = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
                testImg = UIImageView(image: img)
        testImg.frame = CGRect(x: 0,y: 0,width: 500,height: 500)
        myView.addSubview(testImg)
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

当我尝试给 UIImageView 设置框架时,我得到了这个错误:

致命错误:在拆包 Optional 值时意外地找到 nil

可能是我没有正确创建图像。

更新

testImg = UIImageView(image: img)

这行代码覆盖了 UIImageViewIBOutlet ,将其删除并简单地执行了 testImg.image = img ,解决了问题。

1
你连接了插座吗? - Idan
是的,两个插座都已连接。 - Jamil
在身份检查器中设置了Storyboard ViewController类吗? - Idan
是的,它已经设置好了。 - Jamil
3个回答

2

简单的方法:将图片拖放到Xcode的文件视图/项目导航器中。

选择图像视图 - 然后属性检查 - 在图像下 - 选择要加载的图像文件名。

随时享受拖放的乐趣。

困难的方法:

if let filePath = Bundle.main.path(forResource: "imageName", ofType:     "jpg"), let image = UIImage(contentsOfFile: filePath) {    imageView.contentMode = .scaleAspectFit
    imageView.image = image
}

我没有文件,我是通过UIBezierPath创建图像。 - Jamil
你的意思是我不能通过代码创建图像并将其添加到UIImageView中吗? - Jamil
抱歉,我本来想说无能为力。 - Lankan

0

错误应该与您推送或呈现ViewController的方式有关。似乎在显示或呈现时,该插座尚未创建。应该使用以下示例中的instantiateViewControllerWithIdentifier

let viewController = self.storyboard?.instantiateViewControllerWithIdentifier("YourStoryBoardId")
self.navigationController?.pushViewController(viewController!, animated: true)

我只有一个视图,在 super.viewDidLoad() 后添加了这两个字符串,但没有任何变化。我认为这是 UIImageView 的问题。 - Jamil

0

简单来说:

if let image = img {
    // you don't have to instantiate an imageView again, IBOutlet handles it for you    
    testImg.image = image
    print("Works")
    // if you don't see this output in your debug console, the condition never succeeds and an img is really nil
}

这不是一样的吗? testImg = UIImageView(image: img) - Jamil
添加 if 块,设置图像属性时仍出现相同错误。 - Jamil
1
通过 testImg = UIImageView(image: img),你正在从头开始重写原始的 IBOutlet,并用新的 UIImageView 替换它。 - pedrouan
我的答案对你有帮助吗?:) - pedrouan
是的,非常感谢。我很久以前就将其标记为答案了。 - Jamil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接