UIImageView不更新图像

我正在尝试制作一个简单的“个人资料”视图,允许用户更改他的图片。 图像选择器成功加载图库,我选择新图像然后将其写入文档目录以在下次启动时加载它,问题是图像视图没有刷新新图像,直到我退出应用程序并再次重新启动(只有viewDidLoad工作但是viewWillAppear正在加载旧图像,虽然它被覆盖!)任何想法?

import UIKit class Profile: UIViewController,UIImagePickerControllerDelegate,UINavigationControllerDelegate { var imagePicker:UIImagePickerController=UIImagePickerController() var pickedImage:UIImage? let filemgr = NSFileManager.defaultManager() @IBOutlet weak var profilepic: UIImageView! @IBOutlet weak var lblheight: UILabel! @IBOutlet weak var lblwidth: UILabel! override func viewDidLoad() { super.viewDidLoad() profilepic.layer.borderWidth=1 profilepic.layer.borderColor=UIColor.blackColor().CGColor let tapGestureRecognizer = UITapGestureRecognizer(target:self, action:Selector("imageTapped:")) profilepic.userInteractionEnabled = true profilepic.addGestureRecognizer(tapGestureRecognizer) imagePicker.delegate=self if profileImageExists() { pickedImage=UIImage(named: Operations.getDocumentsDirectory().stringByAppendingPathComponent("profile.png"))! } else { pickedImage=UIImage(named:"camera.png")! } profilepic.image=pickedImage } func imageTapped(img: AnyObject) { imagePicker.allowsEditing = false imagePicker.sourceType = .PhotoLibrary presentViewController(imagePicker, animated: true, completion: { self.lblheight.text="completed" print ("completed image tab") } ) } override func viewWillAppear(animated: Bool) { pickedImage=UIImage(named: Operations.getDocumentsDirectory().stringByAppendingPathComponent("profile.png"))! profilepic.image=pickedImage } // MARK: - UIImagePickerControllerDelegate Methods func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) { if let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage { profilepic.contentMode = .ScaleToFill profilepic.image = pickedImage if let data = UIImagePNGRepresentation(pickedImage) { let filename = Operations.getDocumentsDirectory().stringByAppendingPathComponent("profile.png") data.writeToFile(filename, atomically: true) } } dismissViewControllerAnimated(true, completion: nil) } func profileImageExists() -> Bool { if let profileImage=UIImage(named: Operations.getDocumentsDirectory().stringByAppendingPathComponent("profile.png")) { return true } else { return false } } } 

使用init(named:)加载UIImage会缓存图像。 因此,只要图像名称没有更改或系统正在清空缓存(例如,当您重新启动应用程序时),图像将从缓存中使用而不会再次加载。

尝试使用init(contentsOfFile:)来加载图像。

尝试更新imagePickerController方法。 您已将pickedImage用作实例变量和本地可选变量。 我使用了newImage。

 func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) { if let newImage = info[UIImagePickerControllerOriginalImage] as? UIImage { profilepic.contentMode = .ScaleToFill profilepic.image = newImage pickedImage = newImage if let data = UIImagePNGRepresentation(newImage) { let filename = Operations.getDocumentsDirectory().stringByAppendingPathComponent("profile.png") data.writeToFile(filename, atomically: true) } } dismissViewControllerAnimated(true, completion: nil) }