* ios: Animated images (GIF) support * Moved from String path to UIImage param * Aspect ratio * Image frame * gif image size * refactor * refactor * fix fullscreen scroll animation * rename UploadContent -> AnyImage * refactor, allow using gifs in profiles * rename back Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>
64 lines
1.6 KiB
Swift
64 lines
1.6 KiB
Swift
//
|
|
// Created by Avently on 19.12.2022.
|
|
// Copyright (c) 2022 SimpleX Chat. All rights reserved.
|
|
//
|
|
|
|
import UIKit
|
|
import SwiftUI
|
|
|
|
class AnimatedImageView: UIView {
|
|
var image: UIImage? = nil
|
|
var imageView: UIImageView? = nil
|
|
|
|
override init(frame: CGRect) {
|
|
super.init(frame: frame)
|
|
}
|
|
|
|
required init?(coder: NSCoder) {
|
|
fatalError("Not implemented")
|
|
}
|
|
|
|
convenience init(image: UIImage) {
|
|
self.init()
|
|
self.image = image
|
|
imageView = UIImageView(gifImage: image)
|
|
imageView!.contentMode = .scaleAspectFit
|
|
self.addSubview(imageView!)
|
|
}
|
|
|
|
override func layoutSubviews() {
|
|
super.layoutSubviews()
|
|
imageView!.frame = bounds
|
|
}
|
|
|
|
func updateImage(_ image: UIImage) {
|
|
if let subview = self.subviews.first as? UIImageView {
|
|
if image.imageData != subview.gifImage?.imageData {
|
|
imageView = UIImageView(gifImage: image)
|
|
imageView!.contentMode = .scaleAspectFit
|
|
self.addSubview(imageView!)
|
|
subview.removeFromSuperview()
|
|
}
|
|
}
|
|
imageView!.frame = bounds
|
|
self.layoutSubviews()
|
|
}
|
|
}
|
|
|
|
struct SwiftyGif: UIViewRepresentable {
|
|
private let image: UIImage
|
|
|
|
init(image: UIImage) {
|
|
self.image = image
|
|
}
|
|
|
|
func makeUIView(context: Context) -> AnimatedImageView {
|
|
AnimatedImageView(image: image)
|
|
}
|
|
|
|
func updateUIView(_ imageView: AnimatedImageView, context: Context) {
|
|
imageView.updateImage(image)
|
|
imageView.imageView!.startAnimatingGif()
|
|
}
|
|
}
|