【问题标题】:UIImageView not updating imageUIImageView 不更新图像
【发布时间】:2015-12-29 23:04:24
【问题描述】:

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

    }

}




}

【问题讨论】:

  • 所以当你从选择器中选择图像并关闭它时,imageview 没有加载新图像?
  • 不,旧图像仍然显示,但是当我关闭应用程序并重新打开它时,新图像正确显示
  • 这就是我所说的,在你关闭选择器后,图像视图没有显示新图像。我说的对吗?
  • 您是否设置了断点,并查看是否在您关闭选择器后执行条件?
  • 断点显示它仍然持有旧图像,该图像不存在于目录中!

标签: ios swift uiimageview


【解决方案1】:

使用init(named:) 加载 UIImage 会缓存图像。所以只要图片名称没有改变或者系统正在清空缓存(例如当你重新启动应用程序时),图片就会从缓存中使用并且不会再次加载。

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

【讨论】:

    【解决方案2】:

    尝试更新您的 imagePickerController 方法。您已将pickImage 用作实例变量和局部可选变量。我改用了 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)
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-23
      • 2012-10-17
      • 2013-04-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多