2015-12-29 54 views
1

我想做一個簡單的「配置文件」視圖,允許用戶更改他的圖片。圖像選擇器會成功加載圖庫,然後選擇新圖像,然後將其寫入文檔目錄以在下次啓動時加載它,問題是imageview不會使用新圖像進行刷新,直到我退出應用程序並重新啓動(僅viewDidLoad有效但viewWillAppear正在加載舊圖像,雖然它被覆蓋!)任何想法?UIImageView沒有更新圖像

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 

    } 

} 




} 
+0

所以當你從選擇器中選擇圖像,並解僱它,imageview沒有加載新的圖像? –

+0

不,舊圖像仍然顯示,但是當我關閉應用程序並重新打開它時,新圖像正確顯示 –

+0

這就是我所說的,在您關閉選取器後,imageview沒有顯示新圖像。我對麼 ? –

回答

3

使用init(named:)加載UIImage緩存圖像。所以只要圖像名稱不改變或系統正在清空緩存(例如,當您重新啓動應用程序時),圖像將從緩存中使用並且不會再次加載。

嘗試使用init(contentsOfFile:)來代替加載圖像。

+0

完美,非常感謝你剛剛救了我的一天:) –

0

嘗試更新您的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) 
}