Wallpaper_Home/wallpaper_project/Pods/lottie-ios/Sources/Public/iOS/FilepathImageProvider.swift
2024-04-17 14:37:20 +08:00

79 lines
2.3 KiB
Swift

//
// FilepathImageProvider.swift
// lottie-swift
//
// Created by Brandon Withrow on 2/1/19.
//
import Foundation
#if canImport(UIKit)
import UIKit
/// Provides an image for a lottie animation from a provided Bundle.
public class FilepathImageProvider: AnimationImageProvider {
// MARK: Lifecycle
/// Initializes an image provider with a specific filepath.
///
/// - Parameter filepath: The absolute filepath containing the images.
/// - Parameter contentsGravity: The contents gravity to use when rendering the images.
///
public init(filepath: String, contentsGravity: CALayerContentsGravity = .resize) {
self.filepath = URL(fileURLWithPath: filepath)
self.contentsGravity = contentsGravity
}
/// Initializes an image provider with a specific filepath.
///
/// - Parameter filepath: The absolute filepath containing the images.
/// - Parameter contentsGravity: The contents gravity to use when rendering the images.
///
public init(filepath: URL, contentsGravity: CALayerContentsGravity = .resize) {
self.filepath = filepath
self.contentsGravity = contentsGravity
}
// MARK: Public
public func imageForAsset(asset: ImageAsset) -> CGImage? {
if
asset.name.hasPrefix("data:"),
let url = URL(string: asset.name),
let data = try? Data(contentsOf: url),
let image = UIImage(data: data)
{
return image.cgImage
}
let directPath = filepath.appendingPathComponent(asset.name).path
if FileManager.default.fileExists(atPath: directPath) {
return UIImage(contentsOfFile: directPath)?.cgImage
}
let pathWithDirectory = filepath.appendingPathComponent(asset.directory).appendingPathComponent(asset.name).path
if FileManager.default.fileExists(atPath: pathWithDirectory) {
return UIImage(contentsOfFile: pathWithDirectory)?.cgImage
}
LottieLogger.shared.warn("Could not find image \"\(asset.name)\" in bundle")
return nil
}
public func contentsGravity(for _: ImageAsset) -> CALayerContentsGravity {
contentsGravity
}
// MARK: Internal
let filepath: URL
let contentsGravity: CALayerContentsGravity
}
extension FilepathImageProvider: Equatable {
public static func ==(_ lhs: FilepathImageProvider, _ rhs: FilepathImageProvider) -> Bool {
lhs.filepath == rhs.filepath
}
}
#endif