Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
79 changes: 79 additions & 0 deletions Sources/SwiftUISupport/Components/ImageView.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
#if canImport(UIKit)
import SwiftUI
import UIKit

/**
UIImageView backed ImageView

For supporting PDF rendering
https://stackoverflow.com/questions/61164005/why-do-pdfs-resized-in-swiftui-getting-sharp-edges
*/
public struct ImageView: View {

let contentMode: UIView.ContentMode
let tintColor: UIColor?
let image: UIImage?

public init(
image: UIImage?,
contentMode: UIView.ContentMode = .scaleAspectFill,
tintColor: UIColor? = nil
) {
self.image = image
self.contentMode = contentMode
self.tintColor = tintColor
}

public var body: some View {
_ImageView(image: image, contentMode: contentMode, tintColor: tintColor)
.aspectRatio(image?.size ?? .zero, contentMode: .fit)
}

private struct _ImageView: UIViewRepresentable {

let contentMode: UIView.ContentMode
let tintColor: UIColor?
let image: UIImage?

init(
image: UIImage?,
contentMode: UIView.ContentMode = .scaleAspectFill,
tintColor: UIColor? = nil
) {
self.image = image
self.contentMode = contentMode
self.tintColor = tintColor
}

func makeUIView(context: Context) -> UIImageView {
let imageView = UIImageView()
imageView.clipsToBounds = true
return imageView
}

func updateUIView(_ uiView: UIImageView, context: Context) {
uiView.contentMode = contentMode
uiView.tintColor = tintColor
uiView.image = image
}

}
}

#if DEBUG

enum Preview_ImageView: PreviewProvider {

static var previews: some View {

Group {
ImageView(image: nil)
}

}

}

#endif

#endif