So say I want to conditionally enable or disable a modifier on a view such as matched geometry effect? As silly as this looks, how would I do this?
Image("Test")
.scaleEffect(self.selectedImageScale)
.offset(self.selectedImageOffset)
.aspectRatio(contentMode: .fit)
if disabled {
.matchedGeometryEffect(id: selectedImage.id, in: self.namespace)
}
You can achieve it with a simple extension on the View:
extension View {
@ViewBuilder
public func `if`<T: View, U: View>(
_ condition: Bool,
then modifierT: (Self) -> T,
else modifierU: (Self) -> U
) -> some View {
if condition { modifierT(self) }
else { modifierU(self) }
}
}
Now you can use it like:
Image("Test")
.scaleEffect(self.selectedImageScale)
.offset(self.selectedImageOffset)
.aspectRatio(contentMode: .fit)
.if(disabled) { view in
view.matchedGeometryEffect(id: selectedImage.id, in: self.namespace)
} else { $0 } // returns unmodified view
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With