Erstellen Sie eine Tippanimation für ein Element in ScrollView

Post a reply

Smilies
:) :( :oops: :chelo: :roll: :wink: :muza: :sorry: :angel: :read: *x) :clever:
View more smilies

BBCode is ON
[img] is ON
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Erstellen Sie eine Tippanimation für ein Element in ScrollView

by Guest » 03 Jan 2025, 19:04

Ich möchte, dass die Elemente in LazyVGrid einen Tippmodifikator haben (ihre Skalierung ändern) und gleichzeitig scrollen können. Ich habe für jedes Element einen Tippmodifikator eingerichtet und es funktioniert wirklich, aber die Möglichkeit, durch den Inhalt zu scrollen, verschwindet. Wenn ich jedoch meinen benutzerdefinierten Tippeffekt deaktiviere, ist das Scrollen wieder verfügbar. Wie kann ich einen Klickeffekt erzielen und gleichzeitig durch den Inhalt scrollen?

Code: Select all

struct ScaledTappable: ViewModifier {

@State var state = false
var tapHandler: () -> Void

func body(content: Content) -> some View {
content
.scaleEffect(state ? 0.9 : 1)
.gesture(
DragGesture(minimumDistance: 0)
.onChanged({ value in
withAnimation(.smooth(duration: 0.2)) {
state = true
}
})
.onEnded({ value in
withAnimation(.bouncy(duration: 0.5)) {
state = false
tapHandler()
}
})
)
}
}
extension View {

@ViewBuilder
func tappable(enabled: Bool = true, onTap: @escaping () -> Void) -> some View {
if enabled {
self.modifier(ScaledTappable(tapHandler: onTap))
} else {
self.opacity(0.3)
}
}
}

Top