Простая SwiftUI Ar c endAngle анимация не работает, только переход из одного состояния в другое - PullRequest
1 голос
/ 14 апреля 2020

Я пытаюсь сделать простую анимацию появления ар c. Это очень просто, и я понятия не имею, почему не работает. Я делаю эту структуру

struct Arc: Shape {
    var center: CGPoint
    var radius: CGFloat
    var endAngle: Double

    func path(in rect: CGRect) -> Path {
        var path = Path()

        path.addArc(center: center, radius: radius, startAngle: .degrees(180), endAngle: .degrees(endAngle), clockwise: false)

        return path
    }
}

И после этого загружаю ее вот так

struct TestView: View {
    @State var endAngle: Double = 180

    var body: some View {
            Arc(center: CGPoint(x: 250, y: 250), radius: 100, endAngle: self.endAngle)
                .stroke(Color.orange, lineWidth: 5)
                .onAppear() {
                    withAnimation(Animation.linear(duration: 20)) {
                        self.endAngle = 0
                    }
            }
    }
}

Но это не анимация, только переход с 180 на 0. Я тоже пробую OnTapGesture, но также и делаю т работа. Сейчас я не знаю, почему это не работает

Мой ContentView прост

struct ContentView: View {
    var body: some View {
      TestView()
    }
}

Как я могу это исправить?

1 Ответ

1 голос
/ 15 апреля 2020

Просто добавьте анимируемые данные к вашему Arc, чтобы указать, какой параметр должен быть анимирован, как показано ниже

Протестировано с Xcode 11.4 / iOS 13.4

struct Arc: Shape {
    var center: CGPoint
    var radius: CGFloat
    var endAngle: Double

    var animatableData: CGFloat {     // << here !!
        get { CGFloat(endAngle) }
        set { endAngle = Double(newValue) }
    }

    func path(in rect: CGRect) -> Path {
        var path = Path()

        path.addArc(center: center, radius: radius, startAngle: .degrees(180), endAngle: .degrees(endAngle), clockwise: false)

        return path
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...