如何将图像加载到iOS应用程序中

时间:2016-11-24 15:37:37

标签: ios swift uiimageview

我正在尝试创建一个能够使用相机拍摄图像的应用,然后加载到UIImageView。当我重新启动应用程序时,我希望将照片加载到UIImageView中,我该怎么办呢?

拍照:

@IBOutlet weak var p2Image: UIImageView!    
@IBAction func p2takePhoto(_ sender: Any) {  

    let image = UIImagePickerController()  
    image.delegate = self  
    image.sourceType = UIImagePickerControllerSourceType.camera  
    image.allowsEditing = false  
    self.present(image, animated : true){}  

}  

拍摄照片后,我使用UIImageView显示照片并保存照片的路径:

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {  
    if let image = info[UIImagePickerControllerOriginalImage] as? UIImage  
    {  
        p2Image.image = image  
        UserDefaults.standard.set(p2Image.image?.accessibilityPath, forKey: "p2ImagePath")  
    }  
    else  
    {  

    }  
    self.dismiss(animated: true, completion: nil)  
    }  

每次打开我的应用程序时显示我的照片的代码:

override func viewDidAppear(_ animated: Bool) {  
    if let x = UserDefaults.standard.object(forKey: "p2ImagePath") as? String  
    {  
        p2Image.image = x  
    }  

但它不起作用,甚至无法建立,它说

  

p2Image.image = x(无法将类型字符串的值赋给UIImage类型)

我错过了什么吗?或者我使用了错误的方法?

2 个答案:

答案 0 :(得分:0)

将图像存储在UserDefaults中是个坏主意;存储它的更好的解决方案on the disk

下面

if let x = UserDefaults.standard.object(forKey: "p2ImagePath") as? String  
{  
    p2Image.image = x  
} 

你试图在路径" p2ImagePath"字符串,如果成功,将其设置为图像视图;如果你想要它编译,把它投射到UIImage,但是,无论如何,你真正应该做的是将图像作为NSData存储在特定的路径并存储它

编辑:

我错过了您的accessabilityPath,并认为您正试图在UserDefaults上存储准确的图像:) 所以,你可以尝试

if let x = UserDefaults.standard.object(forKey: "p2ImagePath") as? String  
{  
    p2Image.image = UIImage(contentsOfFile: x)
} 

答案 1 :(得分:0)

我终于用

解决了
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {

    if let image = info[UIImagePickerControllerOriginalImage] as? UIImage
    {
        p2Image.image = image
        let saveImage = p2Image.image
        let imageData:NSData = UIImagePNGRepresentation(saveImage!)! as NSData

        UserDefaults.standard.set(imageData, forKey: "keyp2Image")
    }
    else
    {
        //error message
    }
    self.dismiss(animated: true, completion: nil)
}


override func viewWillAppear(_ animated: Bool) {


    if UserDefaults.standard.object(forKey: "keyp2Image") != nil
    {
    let data = UserDefaults.standard.object(forKey: "keyp2Image") as! NSData
    p2Image.image = UIImage(data: data as Data)
    }
}