Ios 在苹果示例应用程序中打开配料卡时,如何重现美丽的过渡;Fruta“;

Ios 在苹果示例应用程序中打开配料卡时,如何重现美丽的过渡;Fruta“;,ios,swiftui,Ios,Swiftui,一般来说,我对swiftUI和iOS开发比较陌生,最近我下载了苹果的示例代码“fruta”,它使用了应用程序剪辑、小部件等 当你打开一个配料时,我想做一些类似于转换的事情,但无论我如何深入他们的代码,我都找不到他们是如何做到的。我找到了一种方法,但我认为这不是最理想的方法 struct IngredientCardTest: View { @State var isCardShown = false @Namespace var namespace var body: some View {

一般来说,我对swiftUI和iOS开发比较陌生,最近我下载了苹果的示例代码“fruta”,它使用了应用程序剪辑、小部件等


当你打开一个配料时,我想做一些类似于转换的事情,但无论我如何深入他们的代码,我都找不到他们是如何做到的。

我找到了一种方法,但我认为这不是最理想的方法

struct IngredientCardTest: View {
@State var isCardShown = false
@Namespace var namespace

var body: some View {
        GeometryReader { geo in
        if isCardShown {
            RoundedRectangle(cornerRadius: 25)
                .matchedGeometryEffect(id: "card", in: namespace)
                .frame(maxWidth: 300, maxHeight: 350, alignment: .center)
                .scaleEffect(isCardShown ? -1 : 1)
                .frame(maxWidth: geo.size.width, maxHeight: geo.size.height, alignment: .center)
                .onTapGesture {
                    withAnimation(.spring()) {
                        isCardShown.toggle()
                    }
                }
        } else {
            RoundedRectangle(cornerRadius: 25)
                .matchedGeometryEffect(id: "card", in: namespace)
                .frame(maxWidth: 190, maxHeight: 190, alignment: .center)
                .scaleEffect(isCardShown ? -1 : 1)
                .frame(maxWidth: geo.size.width, maxHeight: geo.size.height, alignment: .center)
                .onTapGesture {
                    withAnimation(.spring()) {
                        isCardShown.toggle()
                    }
                }
        }
        }
    .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .center)
}

}

你尝试过什么吗?我尝试过使用.spring()动画(失败得很厉害),我尝试过.mathchedGeometryEffect(id:“card”,名称空间:namespace),我尝试过线性动画