So stellen Sie eine reibungslose Animation derselben Ansicht in verschiedenen Stapeln sicher, wenn Sie das Fokusereignis

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: So stellen Sie eine reibungslose Animation derselben Ansicht in verschiedenen Stapeln sicher, wenn Sie das Fokusereignis

by Guest » 03 Jan 2025, 04:11

Ich habe matchedGeometryEffect verwendet, um die Größe und Position der beiden Ansichten miteinander zu „verknüpfen“.
Aber ich habe versucht, Textfield zu verwenden und den Zeitpunkt des Auslösens der Animation zum Fokussieren geändert. Wenn die Tastatur eingeblendet wird, wird die Animation nicht reibungslos ausgeführt.
Wie sorgt man dafür, dass die Elemente in der Ansicht reibungslos gleiten? (Position1 bewegt sich sanft zu Position2)

Code: Select all

struct ContentView: View {
@State private var text = ""
@Namespace var ns
@FocusState private var isFocused: Bool

var body: some View {
ZStack {
Color.clear
.contentShape(Rectangle())
.onTapGesture {
isFocused = false
}
VStack {
HStack {
TextField("placeholder", text: $text, axis: .vertical)
.focused($isFocused)
.frame(minHeight: 28)
.background(Color.red)
if !isFocused {
Text("xxxxxx") // position1
.background(Color.blue)
.matchedGeometryEffect(id: "xxxxxx", in: ns)
}
}
if isFocused {
HStack {
Spacer()
Text("xxxxxx") // position2
.background(Color.blue)
.matchedGeometryEffect(id: "xxxxxx", in: ns)
}
}
}
.background(Color.yellow)
.animation(.easeInOut(duration: 1), value: isFocused)
}
.padding()
}
}
Image

Top