Skip to content
Merged
Show file tree
Hide file tree
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
23 changes: 18 additions & 5 deletions AsyncImageView/AsyncSwiftUIImageView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -25,17 +25,21 @@ public struct AsyncSwiftUIImageView<

@State private var viewModelReference: LazyReference<ViewModel>

private let contentMode: ContentMode

private var viewModel: ViewModel {
self.viewModelReference.value
}

public init(
renderer: Renderer,
placeholderRenderer: PlaceholderRenderer? = nil
placeholderRenderer: PlaceholderRenderer? = nil,
contentMode: ContentMode = .fit
) {
self.init(
renderer: renderer,
placeholderRenderer: placeholderRenderer,
contentMode: contentMode,
uiSchedulerFactory: { UIScheduler() },
imageCreationSchedulerFactory: { QueueScheduler() }
)
Expand All @@ -44,11 +48,13 @@ public struct AsyncSwiftUIImageView<
public init(
renderer: Renderer,
placeholderRenderer: PlaceholderRenderer? = nil,
uiScheduler: ReactiveSwift.Scheduler
uiScheduler: ReactiveSwift.Scheduler,
contentMode: ContentMode = .fit
) {
self.init(
renderer: renderer,
placeholderRenderer: placeholderRenderer,
contentMode: contentMode,
uiSchedulerFactory: { uiScheduler },
imageCreationSchedulerFactory: { QueueScheduler() }
)
Expand All @@ -57,11 +63,13 @@ public struct AsyncSwiftUIImageView<
public init(
renderer: Renderer,
placeholderRenderer: PlaceholderRenderer? = nil,
imageCreationScheduler: ReactiveSwift.Scheduler
imageCreationScheduler: ReactiveSwift.Scheduler,
contentMode: ContentMode = .fit
) {
self.init(
renderer: renderer,
placeholderRenderer: placeholderRenderer,
contentMode: contentMode,
uiSchedulerFactory: { UIScheduler() },
imageCreationSchedulerFactory: { imageCreationScheduler }
)
Expand All @@ -71,11 +79,13 @@ public struct AsyncSwiftUIImageView<
renderer: Renderer,
placeholderRenderer: PlaceholderRenderer? = nil,
uiScheduler: ReactiveSwift.Scheduler,
imageCreationScheduler: ReactiveSwift.Scheduler
imageCreationScheduler: ReactiveSwift.Scheduler,
contentMode: ContentMode = .fit
) {
self.init(
renderer: renderer,
placeholderRenderer: placeholderRenderer,
contentMode: contentMode,
uiSchedulerFactory: { uiScheduler },
imageCreationSchedulerFactory: { imageCreationScheduler }
)
Expand All @@ -84,9 +94,11 @@ public struct AsyncSwiftUIImageView<
internal init(
renderer: Renderer,
placeholderRenderer: PlaceholderRenderer?,
contentMode: ContentMode = .fit,
uiSchedulerFactory: @escaping () -> ReactiveSwift.Scheduler,
imageCreationSchedulerFactory: @escaping () -> ReactiveSwift.Scheduler
) {
self.contentMode = contentMode
_viewModelReference = State(
initialValue: LazyReference {
ViewModel(
Expand Down Expand Up @@ -137,7 +149,8 @@ public struct AsyncSwiftUIImageView<
if let result = self.viewModel.renderResult {
Image(uiImage: result.image)
.resizable()
.scaledToFit()
.aspectRatio(nil, contentMode: self.contentMode)
.id(ObjectIdentifier(result.image))
.transition(
AnyTransition.opacity.animation(
result.cacheHit
Expand Down
1 change: 1 addition & 0 deletions AsyncImageViewTests/AsyncSwiftUIImageViewStateTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ struct AsyncSwiftUIImageViewStateTests {
let renderer = StateTestRenderer()

_ = StateTestImageView(renderer: renderer)
_ = StateTestImageView(renderer: renderer, contentMode: .fill)
_ = StateTestImageView(renderer: renderer, uiScheduler: ImmediateScheduler())
_ = StateTestImageView(renderer: renderer, imageCreationScheduler: ImmediateScheduler())
_ = StateTestImageView(
Expand Down
Loading