如何为iOS 15更新此动画视图

kr98yfug  于 2023-11-19  发布在  iOS
关注(0)|答案(3)|浏览(125)

我有一个“消息气泡”,它从屏幕的一侧“弹”出来。我使用以下代码:

struct MessageView: View, Identifiable {
  let id = UUID()
  var side: MessageBubbleSide = .left
  let innerView: AnyView
  var hasBackground = true

  var body: some View {
    HStack {
      innerView
        .padding(.horizontal, .five)
        .padding(.vertical, .four)
        .messageBubble(
          displayFrom: side,
          hasBackground: hasBackground
        )
      Spacer()
    }
    .transition(.move(edge: side == .left ? .leading : .trailing))
    .animation(.spring()) 
  }
}

字符串
这是可行的,但在为iOS 15构建时,它显示为'animation' was deprecated in iOS 15.0: Use withAnimation or animation(_:value:) instead.。我通常知道如何在其他情况下做到这一点,但当视图出现在屏幕上时想要一个Spring动画时,无法解决这个问题。有人知道如何做到这一点吗?

pepwfjgg

pepwfjgg1#

你需要添加一个激活动画的值(也就是依赖项)。

.transition(.move(edge: side == .left ? .leading : .trailing))
.animation(.spring(), value: side)     // << here !!

字符串

pnwntuvh

pnwntuvh2#

我所做的就是使用新的API,它需要一个值,我只是在其中抛出了一个UUID:

.animation(.linear, value: UUID())

字符串

bxgwgixi

bxgwgixi3#

如果希望动画在视图出现时开始,请使用onAppear:

struct MessageView: View, Identifiable {
    let id = UUID()
    var side: MessageBubbleSide = .left
    let innerView: AnyView
    var hasBackground = true
    
    @State private var showHeadline: Bool = false // declare here
    
    var body: some View {
        HStack {
            innerView
                .padding(.horizontal, .five)
                .padding(.vertical, .four)
                .messageBubble(
                    displayFrom: side,
                    hasBackground: hasBackground
                )
            Spacer()
        }
        .transition(.move(edge: side == .left ? .leading : .trailing))
        .animation(.spring(), value: UUID())
        .onAppear(perform: {
            self.showHeadline.toggle()
        })
    }
}

字符串

相关问题