【发布时间】:2022-07-17 22:57:39
【问题描述】:
我想知道如何为 ViewBuilder 视图的内容大小设置动画。我有这个:
struct CardView<Content>: View where Content: View {
private let content: Content
init(@ViewBuilder content: () -> Content) {
self.content = content()
}
var body: some View {
VStack(spacing: 0) {
content
.padding(16)
}
.background(.white)
.cornerRadius(14)
.shadow(color: .black.opacity(0.07), radius: 12, x: 0, y: 2)
}
}
我想为content 的任何大小更改设置动画,但我找不到这样做的好方法。我发现了两种可行的方法:
- 在
CardView中使用animation(.linear)有效,但由于我没有value可将动画附加到,因此不推荐使用和劝阻。 - 在更改内容时在
content中使用withAnimation也可以,但我想将此行为封装在CardView中。CardView被大量重用,在content中执行此操作很容易忘记,而且在我看来也不属于这种行为。
我也尝试过使用GeometryReader,但找不到一个好方法。
【问题讨论】:
-
请同时添加一个使用此 CardView 的视图演示,包括您想要动画的尺寸,因为不清楚这里到底应该动画什么。
-
这是可能的,但您已经为 maxWidth = .infinity 制作了框架,所以可以将您的问题更正为高度,或者您应该删除框架修饰符。
-
@Asperi 我会尽快添加一个演示以进行澄清,但我不确定这里有什么不清楚的地方。内容的大小会发生变化,应该通过放大或缩小 CardView 以适应新的大小来进行动画处理。
-
@swiftPunk 我删除了它,你是对的,但我认为一般方法/问题是相同的,无论你想为一维还是二维动画。
标签: ios swift animation swiftui viewbuilder