在学swiftUI的各种animation。然后写了一段来看matchedGeometryEffect的效果。然后我期待的效果是这样的。
以下是代码
struct MatchedGeometryView: View {
@Namespace private var shapeTransition
@State var exchange = false
var body: some View {
VStack{
HStack{
if exchange {
Circle()
.frame(width: 50)
.matchedGeometryEffect(id: "circle", in: shapeTransition)
//.frame(width: 50)
}
Spacer()
if !exchange {
RoundedRectangle(cornerRadius: 10)
.matchedGeometryEffect(id: "circle", in: shapeTransition)
.frame(width: 100, height: 100)
}
}
}
.onTapGesture{
withAnimation(.linear(duration: 1)){
exchange.toggle()
}
}
.foregroundColor(.blue)
}
}
但实际上我运行的结果是这样的。
就是丑的不像样子。
然后我找了很久找到了原因。
Circle()
.frame(width: 50)
.matchedGeometryEffect(id: "circle", in: shapeTransition)
这里的两个modifier顺序是有要求的,必须把frame放到后面。
别问我为什么抄示例中的代码时会发生这种事。
我先画了连个图形,然后加上的matchedGeometryEffect,按照习惯,我会把新的modifier放到后面。就这样了。。。