SwiftUI - 如何获取轮播中当前显示的项目索引?

SwiftUI - How to get currently displayed item index in a carousel?

我正在尝试重新创建与 Carrot Weather Layout 修改器相同的视图,即按钮顶部的旋转木马,当按下该按钮时,将打开当前显示的项目的详细视图。

您将采用什么方法来实现这一目标?我试过使用 onTapesture 和 onDragGesture 来存储附加到项目的值,但这似乎不起作用。

感谢您的帮助!

一种方法可能是使用 TabView 的选择 属性,并使用 .tag(index) 标记 TabView 内的每个视图,其中 index 是一个 int。然后,您可以使用绑定到选择的状态变量 属性 来了解选择了哪个视图。

import SwiftUI

struct SwiftUIView: View {
    
    @State var tabSelected = 0
    @State var weatherText = "is..."
    
    var body: some View {
        
        VStack {
            
            Spacer()
            
            Text("Weather: \(weatherText)")
                .font(.largeTitle)
                .bold()
            
            Spacer()
            
            TabView (selection: $tabSelected) {

                  // Add each of the carousel views, e.g.images
                  // First view in carousel
                Image(systemName:"sun.max")
                    .resizable()
                    .scaledToFit()
                  .tag(1)

                // Second view in carousel
                Image(systemName:"cloud.rain")
                    .resizable()
                    .scaledToFit()
                  .tag(2)
            }
            .tabViewStyle(PageTabViewStyle(indexDisplayMode: .automatic))
            .indexViewStyle(PageIndexViewStyle(backgroundDisplayMode: .always))
            
            Spacer()
            
            Button("GET WEATHER..") {
                if(tabSelected == 1)
                {
                    weatherText = "It's sunny"
                }
                else if(tabSelected == 2)
                {
                    weatherText = "It's raining"
                }
            }
            
            Spacer()
        }
       
    }
}