jsdw_ios/QuickLocation/Plugin/ImagePlugin.swift

170 lines
5.7 KiB
Swift
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// ImagePlugin.swift
// DLSDK
//
// Created by osell on 2023/4/14.
//
import UIKit
import Kingfisher
import CoreMedia
public protocol ImageSource {
/// URL
var imageURL: URL? { get }
///
var imageStr: String? { get }
}
extension ImageSource {
var imageURL: URL? { nil }
var imageStr: String? { nil }
}
extension String: ImageSource {
public var imageURL: URL? { URL(string: self.urlEncodingWithQueryAllowedCharacters) }
public var imageStr: String? { self }
}
extension URL: ImageSource {
public var imageURL: URL? { self }
public var imageStr: String? { self.absoluteString.urlDecoded }
}
// MARK: - UIImageView
extension DLWrapper where Base: UIImageView {
///
/// - Parameters:
/// - url: /, URL or String
/// - placeholder: nil
/// - completionHandler: nil
@MainActor public func setImage(with url: ImageSource?,
placeholder: UIImage? = nil,
completionHandler: ((UIImage?, Error?) -> Void)? = nil) {
guard let imageURL = url?.imageURL else {
let imageStr = url?.imageStr ?? ""
// ,
if let image = UIImage(named: imageStr) {
base.image = image
return
}
// SDKSDK
if let image = UIImage(named: imageStr) {
base.image = image
return
}
// nil
base.image = placeholder
return
}
// ,
if imageURL.imageStr?.contains(".mp4") == true {
let source = AVAssetImageDataProvider(assetURL: imageURL, time: CMTimeMakeWithSeconds(0.0, preferredTimescale: 1))
base.kf.setImage(with: source.convertToSource(), placeholder: placeholder) { result in
switch result {
case let .success(imageinfo):
completionHandler?(imageinfo.image, nil)
case let .failure(error):
completionHandler?(nil, error)
}
}
} else {
// 使kf
base.kf.setImage(with: imageURL, placeholder: placeholder) { result in
switch result {
case let .success(imageinfo):
completionHandler?(imageinfo.image, nil)
case let .failure(error):
completionHandler?(nil, error)
}
}
}
}
}
// MARK: - Button
extension DLWrapper where Base: UIButton {
///
/// - Parameters:
/// - url: , URL or String
/// - placeholder: nil
/// - completionHandler: nil
@MainActor public func setImage(with url: ImageSource?,
for state: UIControl.State,
placeholder: UIImage? = nil,
completionHandler: ((UIImage?, Error?) -> Void)? = nil) {
guard let imageURL = url?.imageURL else {
let imageStr = url?.imageStr ?? ""
// ,
if let image = UIImage(named: imageStr) {
base.setImage(image, for: state)
return
}
// SDKSDK
if let image = UIImage(named: imageStr) {
base.setImage(image, for: state)
return
}
// nil
base.setImage(placeholder, for: state)
return
}
// 使kf
base.kf.setImage(with: imageURL, for: state, placeholder: placeholder, completionHandler: { result in
switch result {
case let .success(imageinfo):
completionHandler?(imageinfo.image, nil)
case let .failure(error):
completionHandler?(nil, error)
}
})
}
///
/// - Parameters:
/// - url: , URL or String
/// - placeholder: nil
/// - completionHandler: nil
@MainActor public func setBackgroundImage(with url: ImageSource?,
for state: UIControl.State,
placeholder: UIImage? = nil,
completionHandler: ((UIImage?, Error?) -> Void)? = nil) {
guard let imageURL = url?.imageURL else {
let imageStr = url?.imageStr ?? ""
// ,
if let image = UIImage(named: imageStr) {
base.setBackgroundImage(image, for: state)
return
}
// SDKSDK
if let image = UIImage(named: imageStr) {
base.setBackgroundImage(image, for: state)
return
}
// nil
base.setBackgroundImage(placeholder, for: state)
return
}
// 使kf
base.kf.setBackgroundImage(with: imageURL, for: state, placeholder: placeholder, completionHandler: { result in
switch result {
case let .success(imageinfo):
completionHandler?(imageinfo.image, nil)
case let .failure(error):
completionHandler?(nil, error)
}
})
}
}