UIImageView 不更新图像 [英] UIImageView not updating image

查看:37
本文介绍了UIImageView 不更新图像的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试制作一个简单的个人资料"视图,允许用户更改他的图片.图像选择器成功加载图库,然后我选择新图像,然后将其写入文档目录以在下次启动时加载它,问题是在我退出应用程序并再次重新启动之前,imageview 不会使用新图像刷新(只有 viewDidLoad 有效)但是 viewWillAppear 正在加载旧图像,尽管它被覆盖了!)有什么想法吗?

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

    }

}




}

推荐答案

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

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.

尝试使用 init(contentsOfFile:) 代替加载图像.

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

这篇关于UIImageView 不更新图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆