我也有一些问题的图像,当我试图滚动后的图像加载。
我研究了显示的错误图像,我认为我必须缓存加载的图像。这是做这件事的标准方法吗?
我非常精通Android,我非常肯定壁画/毕加索图书馆已经做到了这一点,但我认为它不是在iOS中。
谁能给我指个方向?
谢谢
class PostTableViewCell: UITableViewCell {
@IBOutlet weak var fileView: UIImageView!
@IBOutlet weak var messageLabel: UILabel!
let disposeBag = DisposeBag()
var postViewModel: PostViewModel? {
didSet {
guard let pvm = postViewModel else {
return
}
Alamofire.request(pvm.file).responseImage{ response in
if let image = response.result.value {
self.fileView.image = image
self.fileView.setNeedsLayout()
}
}
pvm.messageText.bindTo(messageLabel.rx.text).addDisposableTo(disposeBag)
}
}
}
class PostViewModel {
private let post: Post
let disposeBag = DisposeBag()
var fileText: BehaviorSubject<String>
var messageText: BehaviorSubject<String>
var file: String {
return post.file!
}
init(post: Post)
{
self.post = post
fileText = BehaviorSubject<String>(value: post.file!)
fileText.subscribe(onNext: {(file) in
post.file = file
}).addDisposableTo(disposeBag)
messageText = BehaviorSubject<String>(value: post.message!)
messageText.subscribe(onNext: {(message) in
post.message = message
}).addDisposableTo(disposeBag)
}
}发布于 2016-12-08 22:14:57
例如,当您使用Alamofire下载某些内容时。您正在脱离主线程(这是一个异步作业)。因此,当您获得数据时,您必须再次将其推回到主线程。
您是否尝试过:
Alamofire.request(pvm.file).responseImage{ response in
DispatchQueue.main.async {
if let image = response.result.value {
self.fileView.image = image
self.fileView.setNeedsLayout()
}
}
}而且,response.result.value很可能不是UIImage,而是某种形式的数据。我不知道你的response.result.value里面是什么,但有可能你必须用数据初始化你的UIImage。
if let image = UIImage(data: response.result.value) {
}https://stackoverflow.com/questions/41040255
复制相似问题