С тех пор я узнал, что MessageKit предоставляет метод делегата в MessagesDisplayDelegate
с именем
func configureMediaMessageImageView(_ imageView: UIImageView,
for message: MessageType,
at indexPath: IndexPath,
in messagesCollectionView: MessagesCollectionView)
Мы можем асинхронно загружать изображения для данного сообщения с помощью этого метода делегата.
Я использую расширение UIImageView
, чтобы помочь с этим
import UIKit
extension UIImageView {
func load(url: URL) {
DispatchQueue.global().async { [weak self] in
if let data = try? Data(contentsOf: url) {
if let image = UIImage(data: data) {
DispatchQueue.main.async {
self?.image = image
}
}
}
}
}
}
Итак, решение выглядит следующим образом
func configureMediaMessageImageView(_ imageView: UIImageView,
for message: MessageType,
at indexPath: IndexPath,
in messagesCollectionView: MessagesCollectionView) {
/*acquire url for the image in my case i had a
custom type Message which stored the image url */
guard
let msg = message as? Message,
let url = msg.downloadURL
else { return }
imageView.load(url: url)
}