mastodon-app-ufficiale-ipho.../MastodonSDK/Sources/MastodonUI/SwiftUI/AnimatedImage.swift

61 lines
1.7 KiB
Swift

//
// AnimatedImage.swift
//
//
// Created by MainasuK Cirno on 2021-7-16.
//
import SwiftUI
import Nuke
import FLAnimatedImage
public struct AnimatedImage: UIViewRepresentable {
public let imageURL: URL?
public init(imageURL: URL?) {
self.imageURL = imageURL
}
public func makeUIView(context: Context) -> FLAnimatedImageViewProxy {
let proxy = FLAnimatedImageViewProxy(frame: .zero)
Nuke.loadImage(with: imageURL, into: proxy.imageView)
return proxy
}
public func updateUIView(_ proxy: FLAnimatedImageViewProxy, context: Context) {
Nuke.cancelRequest(for: proxy.imageView)
Nuke.loadImage(with: imageURL, into: proxy.imageView)
}
}
final public class FLAnimatedImageViewProxy: UIView {
let imageView = FLAnimatedImageView()
override init(frame: CGRect) {
super.init(frame: frame)
imageView.translatesAutoresizingMaskIntoConstraints = false
addSubview(imageView)
NSLayoutConstraint.activate([
imageView.topAnchor.constraint(equalTo: topAnchor),
imageView.leadingAnchor.constraint(equalTo: leadingAnchor),
imageView.trailingAnchor.constraint(equalTo: trailingAnchor),
imageView.bottomAnchor.constraint(equalTo: bottomAnchor),
])
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
struct AnimatedImage_Previews: PreviewProvider {
static var previews: some View {
AnimatedImage(
imageURL: URL(string: "https://upload.wikimedia.org/wikipedia/commons/2/2c/Rotating_earth_%28large%29.gif")
)
.frame(width: 300, height: 300)
}
}