[英]Load image from the file after rewrite it - UIImage
我從文件加載圖像時遇到了愚蠢的問題。 我對UITabBarController有兩個看法。
在第一個視圖中,用戶可以從照片庫或相機中加載其圖像。 第二張照片展示了這張照片。 該文件在服務器上。 如果用戶未選擇,則其圖像服務器發送了自定義圖像。 如果有上傳的照片,它將推送用戶的照片。
當用戶點擊按鈕時,會有一個帶有選項的菜單。 例如,我們將決定從照片庫拍攝照片。 用戶拍照后:
func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage!, editingInfo: [NSObject : AnyObject]!) {
self.saveUserImage(userID, imageData: UIImagePNGRepresentation(image)!)
apiManager.userUploadProfile(userID, imageData: UIImagePNGRepresentation(image)!)
userImageView.image = image
}
func saveUserImage(userUUID: String, imageData: NSData) {
let path = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).last
let savePath = path! + "/\(userUUID)-user.png"
NSFileManager.defaultManager().createFileAtPath(savePath, contents: imageData, attributes: nil)
}
之后,用戶可以看到所選的圖片,一切都很好。 當用戶更改選項卡時,第二個視圖將刷新其上的所有數據,並再次從服務器下載所有圖像和數據。 不幸的是,包含舊用戶圖像的圖像不會刷新,並且仍然有舊照片。
當我們回到第一個標簽頁時,圖像會回到舊圖像,但幾秒鍾后。
最奇怪的是,如果我正在檢查服務器,是否有新上傳的圖像,並且在應用容器中它也存在。 當我重新啟動應用程序時,一切正常。
看起來此圖像已保存在內存中,iOS從RAM或其他一些交換中獲取了舊版本。 如何刷新UIImageView並顯示當前保存的圖像?
編輯:有一種加載圖像的方法
func userProfilePicture(userId: String) -> UIImage {
let cacheDirectory = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).last
let savePath = cacheDirectory! + "/\(userId)-user.png"
if NSFileManager.defaultManager().fileExistsAtPath(savePath) {
if let image = UIImage(named: savePath) {
return image
}
}
return UIImage(named: "test_avatar")!
}
我無法發表評論,但是我遇到了類似的問題,但是我有一個問題,在用戶更改標簽之前還是之后,圖片是否上傳了? 即使調用該函數來更新數據庫,實際上也要花費一些時間“將新照片/照片的路徑發送到數據庫”。 這是您的選擇,如果在切換選項卡時圖片不在服務器中,請執行加載ui,直到圖片成功上傳並將新的更新值添加到數據庫中為止。 一種簡單的方法是使用SVProgressHUD pod並將默認掩碼類型設置為.clear
,這將禁用用戶交互。 選項2是通過靜態變量,通過prepare for segue方法,通過struct或任何其他方式傳遞實際的UIImage並將需要刷新的圖片設置為uiimage而不是僅從服務器獲取它切換標簽時。
Okey,我找到了答案。 問題出在初始化UIImage。 我們有兩種從文件加載圖像的方法。
第一個加載圖像並將其緩存在內存中。 以后,它僅使用對內存中此圖像數據的引用:
let image = UIImage(named: savePath)
第二種方法是每次用戶使用該功能時都嚴格從文件加載圖像:
let image = UIImage(contentsOfFile: savePath)
現在,它可以完美運行:D
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.