WatchOS SwiftUI вид анимации изменения размера родителя - PullRequest
1 голос
/ 08 февраля 2020

У меня есть простая анимация по кругу внутри представления swiftUI, однако, когда я использую представление в его родительском элементе, оно изменяет размеры родительского представления во время анимации. если я скопирую ту же анимацию непосредственно в родительское представление, она будет работать, как и ожидалось.

мое представление анимации:

struct Spinner: View{

@State private var spin = false

var body: some View {
    Image(systemName: "arrow.2.circlepath")
        .resizable()
        .frame(width: 50, height: 40)
        .rotationEffect(
            .degrees(spin ? 360: 0)
        )
        .animation(
            Animation.linear(duration: 1).repeatForever(autoreverses: false)
        )
        .onAppear(){
            self.spin.toggle()
        }

    }
}

Animation Inside Child View Spinner():

Вид изнутри прокрутки:

 ScrollView {
        VStack {
            Text("Hello World").bold()            
            Button(action: {}){
                Spinner()
            }
        }
    }

Animation directly in View

однако внутри вида работает:

Непосредственно в представлении

 ScrollView {
        VStack {
            Text("Hello World").bold()            
            Button(action: {}){
                Image(systemName: "arrow.2.circlepath")
                .resizable()
                .frame(width: 50, height: 40)
                .rotationEffect(
                     .degrees(spin ? 360: 0)
                )
                .animation(
                      Animation.linear(duration: 1).repeatForever(autoreverses: false)
                )
                .onAppear(){
                    self.spin.toggle()
                }
            }
        }
    }

1 Ответ

0 голосов
/ 11 февраля 2020

Я пробовал оба ваших блока кода

Дело 1

struct Spinner: View{

    @State private var spin = false

    var body: some View {
        Image(systemName: "arrow.2.circlepath")
            .resizable()
            .frame(width: 50, height: 40)
            .rotationEffect(
                .degrees(spin ? 360: 0)
        )
            .animation(
                Animation.linear(duration: 1).repeatForever(autoreverses: false)
        )
            .onAppear(){
                self.spin.toggle()
        }
    }
}

struct ContentView: View {
    var body: some View {
        ScrollView {
            VStack {
                Text("Hello World").bold()
                Text("Hello World").bold()
                Text("Hello World").bold()
                Text("Hello World").bold()
                Button(action: {}){
                    Spinner()
                }
                Text("Hello World").bold()
                Text("Hello World").bold()
                Text("Hello World").bold()
                Text("Hello World").bold()
            }
        }
    }
}

Дело 2

struct ContentView: View {
    @State private var spin = false

    var body: some View {
        ScrollView {
            VStack {
                Text("Hello World").bold()
                Text("Hello World").bold()
                Text("Hello World").bold()
                Text("Hello World").bold()
                Button(action: {}){
                    Image(systemName: "arrow.2.circlepath")
                        .resizable()
                        .frame(width: 50, height: 40)
                        .rotationEffect(
                            .degrees(spin ? 360: 0)
                    )
                        .animation(
                            Animation.linear(duration: 1).repeatForever(autoreverses: false)
                    )
                        .onAppear(){
                            self.spin.toggle()
                    }
                }
                Text("Hello World").bold()
                Text("Hello World").bold()
                Text("Hello World").bold()
                Text("Hello World").bold()
            }
        }
    }
}

ПРИМЕЧАНИЕ. Я добавил несколько дополнительных ярлыков, чтобы сделать прокручиваемым содержимое

Оба приведенных выше результата дают одинаковые результаты, я думаю, что ваши предыдущие GIF не были из недавнего кода.

Пожалуйста, попробуйте еще раз и посмотрите, работает или нет. Если код, который вы добавили в пример, верен, он должен работать

Result of Case 1 and 2

...