2016-02-04 15 views
13

muszę uzyskać UIImage tylko zamiast ładowania normalnego UIImageView z Kingfisher libraryGet UIImage tylko z Kingfisher biblioteki

Aby go zrealizować I wdrożone obejście z UIImageView:

let imageView = UIImageView() 

imageView.kf_setImageWithURL(NSURL(string: cpa.imageName)!, placeholderImage: nil, 
     optionsInfo: [.Transition(ImageTransition.Fade(1))], 
     progressBlock: { receivedSize, totalSize in 
      print("\(receivedSize)/\(totalSize)") 
     }, 
     completionHandler: { image, error, cacheType, imageURL in 
      anView!.image = image //anView IS NOT an UIImageView 
      anView!.frame.size = CGSize(width: 15.0, height: 15.0) 
      print("Finished") 
    }) 

ten kod działa doskonale, ale chciałbym to zrobić w bardziej przejrzysty sposób. Czy istnieje metoda w tej bibliotece, aby uzyskać tylko UIImage? Asynchronizuj i buforuj

Odpowiedz

26

Do tego celu można użyć metody retrieveImage(with:options:progressBlock: completionHandler:) z KingfisherManager.

Może coś takiego:

KingfisherManager.shared.retrieveImage(with: url, options: nil, progressBlock: nil, completionHandler: { image, error, cacheType, imageURL in 
    print(image) 
}) 
+2

Nieznośno przemianowany w Swift 3 do 'KingfisherManager.shared.retrieveImage (z: url! , options: nil, progressBlock: zero) {(obraz, błąd, cacheType, imageURL) ->() w print (image) } ' –

+0

Czy to również buforuje obraz? – DoesData

+1

@DoesData tak to robi –

4

Dzięki nowej wersji Swift 3 można wykorzystać ImageDownloader:

ImageDownloader.default.downloadImage(with: url, options: [], progressBlock: nil) { 
    (image, error, url, data) in 
    print("Downloaded Image: \(image)") 
} 
+3

Nie używałoby pamięci podręcznej, jak w tym [linii] (https://github.com/onevcat/Kingfisher/blob/743e3f2a54408de212d8ec74a5c91747b6a26f7e/Sources/ImageDownloader.swift#L288) 'cachePolicy: .reloadIgnoringLocalCacheData', który jest punktem użycia Kinfisher nad jakąkolwiek inną prostszą metodą –