diff --git a/Sources/Marquee/Extension/View+Ex.swift b/Sources/Marquee/Extension/View+Ex.swift new file mode 100644 index 0000000..c71bbf8 --- /dev/null +++ b/Sources/Marquee/Extension/View+Ex.swift @@ -0,0 +1,24 @@ +// +// View+Ex.swift +// +// +// Created by Shahriar Nasim Nafi on 14/7/21. +// +// Idea from Zane Carter + +import SwiftUI +import Combine + +extension View { + /// A backwards compatible wrapper for iOS 14 `onChange` + @ViewBuilder func onValueChange(value: T, onChange: @escaping (T) -> Void) -> some View { + if #available(iOS 14.0, *) { + self.onChange(of: value, perform: onChange) + } else { + self.onReceive(Just(value)) { (value) in + onChange(value) + } + } + } +} + diff --git a/Sources/Marquee/Marquee.swift b/Sources/Marquee/Marquee.swift index a4723f8..9b0e965 100644 --- a/Sources/Marquee/Marquee.swift +++ b/Sources/Marquee/Marquee.swift @@ -58,13 +58,13 @@ public struct Marquee : View where Content : View { .onDisappear { self.isAppear = false } - .onChange(of: duration) { [] newDuration in + .onValueChange(value: duration) { newDuration in resetAnimation(duration: newDuration, autoreverses: self.autoreverses, proxy: proxy) } - .onChange(of: autoreverses) { [] newAutoreverses in + .onValueChange(value: autoreverses){ newAutoreverses in resetAnimation(duration: self.duration, autoreverses: newAutoreverses, proxy: proxy) } - .onChange(of: direction) { [] _ in + onValueChange(value: direction ) { _ in resetAnimation(duration: duration, autoreverses: autoreverses, proxy: proxy) } }.clipped()