UIImageView not updating image

天涯浪子 提交于 2019-12-08 08:16:16

问题


I am trying to make a simple "Profile" view that allows the user to change his picture. the image picker loads the gallery successfully and i choose the new image then write it to documents directory to load it in next launch, the problem is the imageview is not refreshing with the new image until i exit the app and relaunch again (only viewDidLoad works but viewWillAppear is loading the old image although it is overwritten!) any ideas?

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

    }

}




}

回答1:


Loading an UIImage with init(named:) caches the image. So as long as the image name does not change or the system is emptying the cache (for example when you restart the app) the image will be used from the cache and not loaded again.

Try to use init(contentsOfFile:) instead to load the image.




回答2:


Try updating your imagePickerController method. You have used pickedImage as an instance variable and an local optional variable. I have used newImage instead.

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


来源:https://stackoverflow.com/questions/34512918/uiimageview-not-updating-image

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!