如何在 swift 中使用 kingFisher 库中的 AspectScaledToFitAndCenterSizeFilter
Posted
技术标签:
【中文标题】如何在 swift 中使用 kingFisher 库中的 AspectScaledToFitAndCenterSizeFilter【英文标题】:How to use AspectScaledToFitAndCenterSizeFilter in kingFisher library in swift 【发布时间】:2021-09-22 10:51:05 【问题描述】:在我的项目中,我在 swift 中使用了 AlamofireImage。现在我们用 KingFisher 库替换了 AlamofireImage。我已经使用下面创建了一个结构来适应过滤器
struct AspectScaledToFitAndCenterSizeFilter: ImageFilter, Sizable
/// The size of the filter.
let size: CGSize
/// Initializes the `AspectScaledToFitSizeFilter` instance with the given size.
///
/// - parameter size: The size.
///
/// - returns: The new `AspectScaledToFitSizeFilter` instance.
init(size: CGSize)
self.size = size
/// The filter closure used to create the modified representation of the given image.
var filter: (UIImage) -> UIImage
image in
image.imageAspectScaledAndCenter(toFit: self.size)
当我们使用 AlmofireImage 时,使用下面的代码来设置图片 url
imageView.af.setImage(withURL: imageURL.mediaURL(), placeholderImage: #imageLiteral(resourceName: "icMissingEntreeGrid"), filter: AspectScaledToFitAndCenterSizeFilter(size: imageSize))
现在我将代码替换为
imageView.kf.setImage(with: imageURL.mediaURL(), placeholder: imageLiteral(resourceName: "icMissingEntreeGrid"))
但是如何使用 KingFisher 库添加“AspectScaledToFitAndCenterSizeFilter(size: imageSize)”。任何人都可以在这里帮助我。提前致谢。
【问题讨论】:
【参考方案1】:要创建 Kingfisher 图像处理器,您需要实现 ImageProcessor
协议:
class AspectScaledToFitAndCenterSizeFilter: ImageProcessor
/// Identifier of the processor.
/// - Note: See documentation of `ImageProcessor` protocol for more.
let identifier: String
/// The size of the filter.
let size: CGSize
/// Initializes the `AspectScaledToFitSizeFilter` instance with the given size.
///
/// - parameter size: The size.
///
/// - returns: The new `AspectScaledToFitSizeFilter` instance.
init(size: CGSize)
self.size = size
identifier = "com.package.AspectScaledToFitAndCenterSizeFilter(\(size))"
func process(item: ImageProcessItem, options: KingfisherParsedOptionsInfo) -> KFCrossPlatformImage?
switch item
case .image(let image):
return image.imageAspectScaledAndCenter(toFit: self.size)
case .data:
return (DefaultImageProcessor.default |> self).process(item: item, options: options)
用法:
imageView.kf.setImage(
with: imageURL.mediaURL(),
placeholder: #imageLiteral(resourceName: "icMissingEntreeGrid"),
options: [
.processor(AspectScaledToFitAndCenterSizeFilter(size: .zero))
]
)
在documentation 中查看更多处理器使用情况。
【讨论】:
非常感谢。它按预期工作。以上是关于如何在 swift 中使用 kingFisher 库中的 AspectScaledToFitAndCenterSizeFilter的主要内容,如果未能解决你的问题,请参考以下文章
Swift高仿iOS网易云音乐Moya+RxSwift+Kingfisher+MVC+MVVM
Swift高仿iOS网易云音乐Moya+RxSwift+Kingfisher+MVC+MVVM
Swift高仿iOS网易云音乐Moya+RxSwift+Kingfisher+MVC+MVVM
如何使用 Kingfisher 在 UIButton 的 setBackgroundImage 期间设置 indicatorType