ios - UIImageView 不更新图像

标签 ios swift uiimageview

我正在尝试制作一个简单的“个人资料” View ,允许用户更改他的照片。图像选择器成功加载图库,我选择新图像然后将其写入文档目录以在下次启动时加载它,问题是在我退出应用程序并再次重新启动之前 ImageView 不会刷新新图像(仅 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:) 来加载图像。

关于ios - UIImageView 不更新图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34512918/

相关文章:

ios - Swift:播放录制的音频

ios - 如何更改 iPhone 应用程序中状态栏的颜色?

ios - UIImageView 中自定义 UITableCiewCell 尺寸和分辨率

iphone - 如何强制 UIImageView 及其 subview 在新上下文中重绘?

ios - 将强引用转换为对 self 的弱引用

ios - 我可以更改相机闪光灯亮度级别吗?

ios - 我在 iOS UITableView 中有 NSInvalidArgumentException

swift - 在 mapView 中识别 MKPointAnnotation

ios - 应用程序委托(delegate)未被调用,project.pbxproj 已损坏

ios - UIImageView 并不总是显示