SwiftUI 中的匹配几何效果不起作用
Posted
技术标签:
【中文标题】SwiftUI 中的匹配几何效果不起作用【英文标题】:Matched Geometry Effect in SwiftUI is not working 【发布时间】:2021-12-28 16:25:47 【问题描述】:我想知道为什么我的matchedGeometryEffect
没有按预期工作。我做错什么了吗?因为this guy(在 3:15)做了同样的事情,而且看起来更流畅。我在 M1 MacBook Air 上运行代码,这意味着速度可能不是问题。
这是我的代码:
struct ContentView: View
@Namespace var namespace
@State var bool = true
var body: some View
HStack
if bool
Rectangle()
.frame(width: 100, height: 100)
.foregroundColor(Color.red)
.padding()
.onTapGesture
withAnimation(.spring(response: 0.5, dampingFraction: 0.7))
bool.toggle()
.matchedGeometryEffect(id: "id", in: namespace)
else
Rectangle()
.frame(width: 200, height: 200)
.foregroundColor(Color.red)
.matchedGeometryEffect(id: "id", in: namespace)
感谢您的帮助,Boothosh
【问题讨论】:
【参考方案1】:在 SwiftUI 中,修饰符的顺序很重要。这与matchedGeometryEffect(id:in:properties:anchor:isSource:)
相同。
如果您希望矩形在中心展开,则需要将几何图形在中心对齐。为此,我们将拥有相同大小的Rectangle
s。这意味着Rectangle
s 都将附加matchedGeometryEffect
修饰符,并在其后添加 then 样式。
代码:
HStack
if bool
Rectangle()
.matchedGeometryEffect(id: "id", in: namespace) // <- Here
.frame(width: 100, height: 100)
.foregroundColor(Color.red)
.padding()
.onTapGesture
withAnimation(.spring(response: 0.5, dampingFraction: 0.7))
bool.toggle()
else
Rectangle()
.matchedGeometryEffect(id: "id", in: namespace) // <- Here
.frame(width: 200, height: 200)
.foregroundColor(Color.red)
【讨论】:
以上是关于SwiftUI 中的匹配几何效果不起作用的主要内容,如果未能解决你的问题,请参考以下文章
SwiftUI:为啥 ObservedObject 在 AppDelegate 中不起作用?
如果堆栈大小> 1,则弹出后 SwiftUI3 导航链接不起作用