我正在尝试创建一个能够使用相机拍摄图像的应用,然后加载到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类型)
我错过了什么吗?或者我使用了错误的方法?
答案 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)
}
}