我在我的tableview單元格中使用了下面的代碼,以在主頁上加載用戶的帖子。我正在調整圖片的大小,以便更好地控制應用中顯示的圖片的大小。這段代碼作業得很好,影像的大小也調整得很好。然而,這種調整大小的處理方式大大降低了帖子的速度,而且滾動表視圖現在非常不穩定。
有誰知道如何以一種更有效的方式重寫這個程式?
func set(post:Posts){
self.post = post
//獲得PROFILE影像。
let url = post.url
profileImageView.sd_setImage(with: url, completed: nil)
//獲得MEDIA圖片。
let mediaUrl = post.urlM
MediaPhoto.sd_setImage(with: mediaUrl, completed: nil)
if let imageData: NSData = NSData(contentsOf: mediaUrl) {
let image = UIImage(data: imageData as Data)
let newWidth = MediaPhoto.frame.width
let scale = newWidth/image!
let newHeight = image! .size.height * scale
UIGraphicsBeginImageContext(CGSize(width: newWidth, height: newHeight))
影像!.draw(in: CGRect(x: 0, y: 0, width: newWidth, height: newHeight)
let newImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
MediaPhoto.image = newImage
}
uj5u.com熱心網友回復:
不建議在單元格中進行渲染或格式化等重量級作業
。我建議使用kingfisher來下載圖片并顯示它們。
查看更多。Kingfisher
其中包含一些有用的功能,如:
要調整圖片的大小,請遵循以下代碼:
let resizingProcessor = ResizingImageProcessor( referenceSize: CGSize(width: 100.0 , height: 100.0)
let url = URL(string: path)
imageView.kf. indicatorType = .activity
imageView.kf.setImage(with: url,
選項。[.processor(resizingProcessor)]。
completionHandler: nil 。
)
關于用kingfisher調整大小的更多資訊,請訪問下面的鏈接:
Kingfishe Cheat-Sheet/a>uj5u.com熱心網友回復:
你應該嘗試使用NSCache,我通常創建一個擴展檔案并創建這個方法:
let imageCache = NSCache< AnyObject, AnyObject> ()
extension UIImageView {
func loadImageUsingCacheWithUrlString(_ urlString: String) {
let strUniqueIdentifier_Initial = urlString
self.accessibilityLabel = StrUniqueIdentifier_Initial
if let cachedImage = imageCache.object(forKey: urlString as AnyObject) as? UIImage {
self.image = cachedImage
return。
}
guard let url = URL(string: urlString) else { return }
URLSession.shared.dataTask(with: url, completionHandler: { (data, response, error) in
if error != nil {
print(error ? "")
回傳。
}
let strUniqueIdentifier_Current = self.accessibilityLabel
if strUniqueIdentifier_Initial ! = strUniqueIdentifier_Current {
回傳。
}
DispatchQueue.main.async(execute: {
if let downloadedImage = UIImage(data: data!) {
imageCache.setObject( downloadedImage, forKey: urlString as AnyObject)
self.image = downloadedImage
}
})
}).恢復()
}
然后像這樣呼叫該方法:
//I usually use optional values when creating custom objects.
if let imgUrl = post? /span>.url {
imgView.loadImageUsingCacheWithUrlString(imgUrl)
}
我個人喜歡這個選項,因為我不喜歡使用額外的庫。
。轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/311714.html
標籤:
