forked from zelo72/mastodon-ios
61 lines
1.7 KiB
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)
|
|
}
|
|
}
|