将动画从缩略图动画变为全屏

时间:2020-01-28 05:58:09

标签: swiftui

在用户点击照片时打开照片的detailView时,它可以复制iOS Photos应用程序的行为,在SwiftUI中,它会展开以填充屏幕。

我可以在当前视图的新视图中打开照片,但是我似乎无法管理如何在视图中从当前位置扩展到全屏的动画效果-甚至当嵌套在其中时也可以做到堆吗?

这是我的UI的基本版本:

struct ContentView: View {

    var body: some View {

        VStack {
            BannerView()
                .padding()
            Text("Title")
        }

    }
}

struct BannerView: View {

    var body: some View {
        HStack {
            VStack {
                Image(systemName: "rectangle.fill")
                    .resizable()
                    .aspectRatio(contentMode: .fit)
                    .padding()
                    .onTapGesture {
                        // Enbiggen image
                }
            }
            VStack {
                Text("Text")
                Text("Text 1")
                Text("Text 2")
            }
        }
        .background(Color(UIColor.systemBackground))
    }

}

因此,当用户在BannerView中点击图像时,该图像应根据其当前大小进行动画处理以填充屏幕。

我能在脑海中管理它的唯一方法是在ContentView中将Bannerview图像上的重复图像隐藏起来,并对可见的动画进行动画处理,然后缩放到全屏,但是我将如何检测其中的图像的位置和大小BannerView?

1 个答案:

答案 0 :(得分:1)

通过为矩形的长宽比添加State,我可以通过简单的缩放动画使图像变为全屏

struct BannerView: View {
    @State var contentMode = ContentMode.fit

    var body: some View {
        HStack {
            VStack {
                Image(systemName: "rectangle.fill")
                    .resizable()
                    .aspectRatio(contentMode: contentMode)
                    .padding()
                    .onTapGesture {
                        withAnimation {
                            self.contentMode = ContentMode.fill
                        }
                }
            }
            VStack {
                Text("Text")
                Text("Text 1")
                Text("Text 2")
            }
        }
        .background(Color(UIColor.systemBackground))
    }
}