Почему эта пульсирующая анимация перемещает позиции x и y?

#swift #swiftui

#swift #swiftui

Вопрос:

Мне нужен Text() вид, который бесконечно масштабируется вверх и вниз на месте. У меня есть такая, которая масштабируется вверх и вниз, одновременно перемещая позиции x и y. Я не понимаю.

Как мне заставить эту штуку масштабироваться вверх и вниз, не перемещая x / y ?

Спасибо за вашу помощь!

 struct ContentView: View {
    @State private var pulsate: Bool = false
    
    var body: some View {
        GeometryReader { geo in
        Text("Hello, World!")
            .foregroundColor(Color.black)
            .multilineTextAlignment(.center)
            .position(x: geo.size.width * 0.12, y: geo.size.height * 0.05)
            .shadow(radius: 2)
            .scaleEffect(self.pulsate ? 1.0 : 1.05)
            .animation(Animation.easeInOut(duration: 1).repeatForever(autoreverses: true).speed(1))
            .onAppear() {
                self.pulsate.toggle()
            }
        }
    }
}
  

Комментарии:

1. Можете ли вы добавить GIF-изображение эффекта, который вы видите, и объяснить, что он делает, чего вы не хотите, чтобы он делал?

Ответ №1:

Позиция модификатора важна. В вашем случае это должно быть после того, как анимация не будет затронута, как в

 var body: some View {
    GeometryReader { geo in
    Text("Hello, World!")
        .foregroundColor(Color.black)
        .multilineTextAlignment(.center)
        .shadow(radius: 2)
        .scaleEffect(self.pulsate ? 1.0 : 1.05)
        .animation(Animation.easeInOut(duration: 1).repeatForever(autoreverses: true).speed(1))
        .position(x: geo.size.width * 0.12, y: geo.size.height * 0.05)  // << here!!
        .onAppear() {
            self.pulsate.toggle()
        }
    }
}