【问题标题】:How to load an image into an iOS application如何将图像加载到 iOS 应用程序中
【发布时间】:2017-04-08 23:33:48
【问题描述】:

我正在尝试创建一个能够使用相机拍摄图像的应用程序,加载到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 类型)

我错过了什么吗?还是我用错了方法?

【问题讨论】:

    标签: ios swift uiimageview


    【解决方案1】:

    我终于解决了

    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)
        }
    }
    

    【讨论】:

      【解决方案2】:

      将图像存储在 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)
      } 
      

      【讨论】:

      • 您好,感谢您的回复。我试过 p2Image.image = UIImage(contentsOfFile: x)。它没有错误,我可以构建它,但是重新启动后图像没有加载到应用程序中..
      • 图片不显示是不是因为我用的是模拟器??
      • 我不确定,我从来没有在accessibilityPath中使用过这种方法;尝试自己将其存储在磁盘上,然后访问它。有回答的链接,其中描述了如何做到这一点
      • 我对我的发现感到困惑,这就是为什么我认为我应该自己问一个问题来尝试一下
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-24
      • 2016-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多