gpt4 book ai didi

swift - 如何从matchedGeometryEffect 中移除/控制淡入淡出效果?

转载 作者:行者123 更新时间:2023-12-05 00:52:18 27 4
gpt4 key购买 nike

我有一个测试代码来显示这个问题,当我使用matchedGeometryEffect 时,matchedGeometryEffect 会在渲染结果中添加一个不希望的淡入淡出效果,所以我喜欢移除这个淡入淡出效果甚至控制它。当我将 View 的颜色从一种颜色更改为另一种颜色时可能是一件好事,但在我的情况下它并不好,因为颜色一直是黑色的。

struct ContentView: View {

@Namespace var animationNamespaceon
@State private var start: Bool = Bool()

var body: some View {

VStack {

Spacer()

circle

Spacer()

Button("update") { start.toggle() }

}
.animation(Animation.linear(duration: 3), value: start)

}

@ViewBuilder var circle: some View {
if start {

Circle()
.foregroundColor(Color.black)
.matchedGeometryEffect(id: "Circle", in: animationNamespaceon)
.frame(width: 300, height: 300)


}
else {
Circle()
.foregroundColor(Color.black)
.matchedGeometryEffect(id: "Circle", in: animationNamespaceon)
.frame(width: 50, height: 50)

}
}
}

最佳答案

这是默认 .transition(.opacity) 的效果,当 View 从(插入到) View 层次结构中移除时应用。

我假设您需要线性比例转换,例如

    if start {
Circle()
.foregroundColor(Color.black)
.matchedGeometryEffect(id: "Circle", in: animationNamespaceon)
.transition(.scale(scale: 1))
.frame(width: 300, height: 300)
}
else {
Circle()
.foregroundColor(Color.black)
.matchedGeometryEffect(id: "Circle", in: animationNamespaceon)
.transition(.scale(scale: 1))
.frame(width: 50, height: 50)
}

使用 Xcode 13/iOS 15 测试

关于swift - 如何从matchedGeometryEffect 中移除/控制淡入淡出效果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70305354/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com