UIImageView无法更新图像

时间:2015-12-29 14:17:45

标签: ios swift 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

    }

}




}

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

尝试更新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)
}