私は迅速です。私はURLを使って画像をロードしていますsetImageWith URL完了ブロックスワイプ
上記のようにイメージのサイズを印刷すると、21 * 6.5になります。しかし、私がいつか待ってから印刷すると、寸法は188 * 109です。完了ブロックをsetImageWithに追加するにはどうすれば画像の読み込みが完了したかを知ることができます。
私は迅速です。私はURLを使って画像をロードしていますsetImageWith URL完了ブロックスワイプ
上記のようにイメージのサイズを印刷すると、21 * 6.5になります。しかし、私がいつか待ってから印刷すると、寸法は188 * 109です。完了ブロックをsetImageWithに追加するにはどうすれば画像の読み込みが完了したかを知ることができます。
あなたはUIIamge
に続いData
データに完了ブロックでhttps://github.com/rs/SDWebImage
imageView.sd_setImageWithURL(NSURL(string: urlString), completed: {
(image, error, cacheType, url) in
// you can get the image width here...
})
URLは常に最初にあなたが21の* 6.5寸法を持って、その後、実際の寸法188 * 109を得たThatsなぜイメージをロードするための時間がかかりますので、それが起こっています。
すべてのことを管理する第三者のライブラリSDWebImageを選択する最も良い方法は、画像のURLを設定するだけです。メソッド名があり
は、あなたが欲しいものは何でも管理できるように完了ブロックを持っている
open func sd_setImage(with url: URL!, placeholderImage placeholder: UIImage!, options: SDWebImageOptions = [], completed completedBlock: SDWebImage.SDWebImageCompletionBlock!)
です。
func getImageFromUrl(_ strUrl: String, completionHandler handler: @escaping (_ img: UIImage) -> Void) {
DispatchQueue.global(qos: .background).async {
let url = URL(string: strUrl)
let dataFromUrl = Data(contentsOf: url!)
if dataFromUrl == nil {
return
}
DispatchQueue.main.async(execute: {() -> Void in
handler(UIImage(data: dataFromUrl!))
})
})
}
コンバート画像URL
を画像をロードするためSdwebimageを使用することができ、ここでの関数である -
let imageCache = NSCache<AnyObject, AnyObject>()
typealias CompletionHandler = (_ success:Bool, _ image:UIImage?) -> Void
func loadImageUsingCacheWithUrlString(_ urlString:
String,completionHandler: @escaping CompletionHandler) {
let image = UIImage()
//check cache for image first
if let cachedImage = imageCache.object(forKey: urlString as AnyObject) as? UIImage {
image = cachedImage
completionHandler(true, image!)
return
}
if urlString.characters.count == 0 {
completionHandler(false, image)
return
}
//otherwise fire off a new download
let url = URL(string: urlString)
URLSession.shared.dataTask(with: url!, completionHandler: { (data, response, error) in
//download hit an error so lets return out
if error != nil {
print(error ?? "")
completionHandler(false,nil)
return
}
DispatchQueue.main.async(execute: {
if let downloadedImage = UIImage(data: data!) {
image = downloadedImage
imageCache.setObject(downloadedImage, forKey: urlString as AnyObject)
completionHandler(true,image)
}
})
}).resume()
}
使用この:
受け入れられた回答を持つこのリンク、またはあなたがSwiftの新しい人としてhttps://stackoverflow.com/questions/24231680/loading-downloading-image-from-url-on-swiftを希望する人は、URLSessionをよく読んでみることをお勧めします将来:) –
extern libを使用していますか?それとも自分でその方法を書きましたか? extern libにはブロックを含むメソッドが含まれている可能性があります(SDWebImageには、クロージャーが付いていないもの、閉じられていないものなどがあります)。 – Larme