Масштабирование фигур от фактического размера вместо 0 SwiftUI

Я пытаюсь создать импульсную анимацию для приложения, которое создаю с помощью swiftui. Я хочу, чтобы центральный серый круг пульсировал. В настоящее время внешние круги масштабируются от 0, но я бы хотел, чтобы они начинались с размера среднего круга. Это мой текущий код:

import SwiftUI

struct Pulse: View {
    
    @State var animate = false
    @State private var scale: CGFloat = 2
    var body: some View {
        ZStack
        {
            Circle()
                .fill(Color.black)
                .frame(width: 130, height: 130)
            Circle()
                .stroke(Color.red.opacity(0.1), lineWidth: 5)
                .frame(width: 300, height: 300)
                .scaleEffect(self.animate ? 1 : 0)
            Circle()
                .stroke(Color.red.opacity(0.15), lineWidth: 5)
                .frame(width: 266, height: 266)
                .scaleEffect(self.animate ? 1 : 0)
            
            Circle()
                .stroke(Color.red.opacity(0.2), lineWidth: 5)
                .frame(width: 232, height: 232)
                .scaleEffect(self.animate ? 1 : 0)
            
            Circle()
                .stroke(Color.red.opacity(0.3), lineWidth: 5)
                .frame(width: 198, height: 198)
                .scaleEffect(self.animate ? 1 : 0)
            
            Circle()
                .stroke(Color.red.opacity(0.35), lineWidth: 5)
                .frame(width: 164, height: 164)
                .scaleEffect(self.animate ? 1 : 0)
            
            Circle()
                .stroke(Color.red.opacity(0.4), lineWidth: 5)
                .frame(width: 130, height: 130)
                .scaleEffect(self.animate ? 1 : 0)

            
            Circle()
                .fill(Color.gray)
                .frame(width: 130, height: 130)
            
        }
        .frame(width: 290, height: 290, alignment: .center)
        .onAppear(perform: {
            self.animate.toggle()
        })
        .animation(Animation.linear(duration: 6).repeatForever(autoreverses: true))
        .ignoresSafeArea()
    }
}

как это выглядит


person Derick Mathews    schedule 10.10.2020    source источник


Ответы (1)


Отношение размера внутреннего круга к внешнему составляет 130 / 300. Как минимум, вы хотите, чтобы круг с шириной и высотой 300 был 130.

Измените все это:

.scaleEffect(self.animate ? 1 : 0)

to:

.scaleEffect(self.animate ? 1 : 130 / 300)
person vacawama    schedule 11.10.2020