Skip to content

Commit

Permalink
Add LottieView.configure overload that takes a keypath and value in…
Browse files Browse the repository at this point in the history
…stead of a closure (#2415)
  • Loading branch information
freak4pc committed May 28, 2024
1 parent 1910aef commit 5c8d511
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 1 deletion.
3 changes: 2 additions & 1 deletion Example/Example/LottieViewLayoutDemoView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,11 @@ struct LottieViewLayoutDemoView: View {
HStack {
VStack {
LottieView(animation: .named("Samples/LottieLogo1"))
.configure(\.contentMode, to: .scaleAspectFit)
.looping()
.frame(maxWidth: 100)

Text("maxWidth: 100")
Text("maxWidth: 100, contentMode: .scaleAspectFit")
}

VStack {
Expand Down
33 changes: 33 additions & 0 deletions Sources/Public/Animation/LottieView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -141,9 +141,42 @@ public struct LottieView<Placeholder: View>: UIViewConfiguringSwiftUIView {
}
}

/// Returns a copy of this `LottieView` updated to have the specific configuration property
/// applied to its represented `LottieAnimationView` whenever it is updated via the `updateUIView(...)`
/// or `updateNSView(...)` methods.
///
/// - note: This configuration will be applied on every SwiftUI render pass.
/// Be wary of applying heavy side-effects as configuration values.
public func configure<Property>(
_ property: ReferenceWritableKeyPath<LottieAnimationView, Property>,
to value: Property)
-> Self
{
configure { $0[keyPath: property] = value }
}

/// Returns a copy of this `LottieView` updated to have the specific configuration property
/// applied to its represented `LottieAnimationView` whenever it is updated via the `updateUIView(...)`
/// or `updateNSView(...)` methods.
///
/// - note: If the `value` is already the currently-applied configuration value, it won't be applied
public func configure<Property: Equatable>(
_ property: ReferenceWritableKeyPath<LottieAnimationView, Property>,
to value: Property)
-> Self
{
configure {
guard $0[keyPath: property] != value else { return }
$0[keyPath: property] = value
}
}

/// Returns a copy of this `LottieView` updated to have the given closure applied to its
/// represented `LottieAnimationView` whenever it is updated via the `updateUIView(…)`
/// or `updateNSView(…)` method.
///
/// - note: This configuration closure will be executed on every SwiftUI render pass.
/// Be wary of applying heavy side-effects inside it.
public func configure(_ configure: @escaping (LottieAnimationView) -> Void) -> Self {
var copy = self
copy.configurations.append { context in
Expand Down

0 comments on commit 5c8d511

Please sign in to comment.