使用KingFisher在iOS - Swift中获取圆形图片视图

4

场景:

我有一个@IBOutlet weak var posterImageView: UIImageView!,我使用Kingfisher在我的tableView上展示它(我必须使用它)。该图片来自API。所以没问题,图片显示正常,但我想将这个图片显示为圆形。我在没有使用Kingfisher时实现了它,使用以下代码:

posterImageView.layer.cornedRadius = posterImageView.frame.size.width/2
posterImageView.clipsToBounds = true

但是使用翠鸟库,我正在这样做:
let imgStg: String = self.movies[indexPath.row].poster!
let imgURL: URL? = URL(string: imgStg)
let imgSrc = ImageResource(downloadURL: imgURL!, cacheKey: imgStg)

cell.posterImageView.kf.setImage(with: imgSrc)

在这个函数内部:

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell

当我在viewDidLoad()中调用posterImageView.layer.cornedRadius时,Xcode提示在TableViewController中找不到posterImageView。

我该如何使用这个Kingfisher调用来自定义我的图像视图?

2个回答

23

如果我理解正确,我认为你应该在 cellForRowAtindexPath 方法中输入代码以获得圆形图像,而不是 viewDidLoad 方法,因此:

  let imgStg: String = self.movies[indexPath.row].poster!
    let imgURL: URL? = URL(string: imgStg)
    let imgSrc = ImageResource(downloadURL: imgURL!, cacheKey: imgStg)

    cell.posterImageView.layer.cornedRadius = posterImageView.frame.size.width/2
    cell.posterImageView.clipsToBounds = true
    cell.posterImageView.kf.setImage(with: imgSrc)

编辑:刚想起来KingFisher支持圆角图片:

let processor = RoundCornerImageProcessor(cornerRadius: 20)
imageView.kf.setImage(with: url, placeholder: nil, options: [.processor(processor)])

希望这两种方法中的一种适合您。


2

我遇到了同样的问题,然后我找到了这个解决方案,所以我想分享一下:

extension UIImageView {
    func download(url: String?, rounded: Bool = true) {
        guard let _url = url else {
            return
        }
        if rounded {
            let processor = ResizingImageProcessor(referenceSize: self.frame.size) |> RoundCornerImageProcessor(cornerRadius: self.frame.size.width / 2)
            self.kf.setImage(with: URL(string: _url), placeholder: nil, options: [.processor(processor)])
        } else {
            self.kf.setImage(with: URL(string: _url))
        }
    }
}

这里的重要秘密就是这个指令:
ResizingImageProcessor(referenceSize: self.frame.size)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接