Плавная анимация списка строк - PullRequest
1 голос
/ 06 ноября 2019

У меня есть список, в котором я хотел бы отобразить view. Следующий код выдает рывок animation, когда я нажимаю на строку. Я хотел бы изменить, чтобы создать более плавную анимацию. Есть ли способ плавно анимировать изменения в List?

import SwiftUI

struct ContentView: View {
    var body: some View {
        List(0..<10){index in
             ListItem(title: index)
        }
    }
}

struct ListItem: View {
    @State var title: Int
    @State var bOpen = false

    var body: some View {
        VStack{
            Text("\(title+2) items")
            withAnimation{
                self.bOpen ? Options() : nil
            }
        }.onTapGesture {
            self.bOpen.toggle()
        }
    }
}

struct Options: View {
    var body: some View {
        HStack {
            Image(systemName:"circle.fill")
            Image(systemName:"star")
        }

    }
}
struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

Ответы [ 2 ]

1 голос
/ 06 ноября 2019

Используйте модификатор .animation() на ListItem

, например:

ListItem(title: index).animation(.default)

Вы также можете применить его на самом VStack (если вам удалось не оживить все ListItem изменения).

И не нужно withAnimation

0 голосов
/ 06 ноября 2019

Если у вас нет других предметов, достаточно другого ответа с listItem.

Но, в частности, у вас есть другие анимированные элементы в listItem, вы можете сделать следующее:

 var body: some View {
    VStack{
        Text("\(title+2) items")
        self.bOpen ? Options().transition(AnyTransition.move(edge: .top)) : nil
    }.onTapGesture {
    withAnimation{
    self.bOpen.toggle()}
    }
}
  1. исправить положение, где разместить "withAnimation"
  2. ввести мирное transtion действие.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...