美文网首页
已经可以拖拽了

已经可以拖拽了

作者: 写写而已 | 来源:发表于2024-10-28 10:45 被阅读0次

https://juejin.cn/post/7090725181206822942

//
//  SwiftUIView.swift
//  DemoApp
//
//  Created by TEEMO on 2024/10/29.
//
//            Image(systemName: "globe")
//                .imageScale(.large)
//                .foregroundStyle(.tint)
import SwiftUI
import Foundation
struct imageModel: Identifiable {
    var id = UUID()
    var image: String
    var imageName: String
}
let imageModels = [
    imageModel(image: "turtlerock", imageName: "Image - 1"),
    imageModel(image: "turtlerock", imageName: "Image - 2"),
    imageModel(image: "turtlerock", imageName: "Image - 3"),
    imageModel(image: "turtlerock", imageName: "Image - 4"),
    imageModel(image: "turtlerock", imageName: "Image - 5")
]
struct Banners: View {
    @State var currentIndex = 0
    @GestureState var dragOffset: CGFloat = 0
    var body: some View {
        GeometryReader { outerView in
            HStack(spacing: 0) {
                ForEach(imageModels.indices, id: \.self) { index in
                    GeometryReader { innerView in
                        CardView(
                            image: imageModels[index].image,
                            imageName: imageModels[index].imageName
                        )
                        
                    }
                    .padding(.horizontal)
                    .frame(
                        width: outerView.size.width,
                        height: outerView.size.height
                    )
                    
                }
                .padding(.horizontal, 20)
                .frame(
                    width: outerView.size.width,
                    height: outerView.size.height
                )
            }
            .frame(
                width: outerView.size.width,
                height: outerView.size.height,
                alignment: .leading
            )
            .offset(
                x: -CGFloat(self.currentIndex) * outerView.size.width
            )
            .offset(x: self.dragOffset)
            .gesture(
                DragGesture()
                    .updating(
                        self.$dragOffset,
                        body: { value, state, transaction in
                            state = value.translation.width
                        }
                    )
                    .onEnded({ value in
                        let threshold = outerView.size.width * 0.65
                        var newIndex = Int(-value.translation.width / threshold)+self.currentIndex
                        newIndex = min(max(newIndex, 0), imageModels.count - 1)
                        self.currentIndex = newIndex
                    })
            )
        }
    }
}
struct CardView: View {
    let image: String
    let imageName: String
    
    var body: some View {
        ZStack {
            GeometryReader { geometry in
                Image(image)
                    .resizable()
                    .scaledToFill()
                    .frame(width: geometry.size.width, height: geometry.size.height)
                    .cornerRadius(15)
                    .overlay(
                        Text(imageName)
                            .font(.system(.headline, design: .rounded))
                            .fontWeight(.heavy)
                            .padding(10)
                            .background(Color.white)
                            .padding([.bottom, .leading])
                            .opacity(1)
                            .frame(
                                minWidth: 0,
                                maxWidth: .infinity,
                                minHeight: 0,
                                maxHeight: .infinity,
                                alignment: .bottomLeading
                            )
                    )
            }
        }
    }
}
#Preview {
    Banners()
}

相关文章

  • 拖延症的好处

    拖啊,拖啊,咦?降价了耶! 拖啊,拖啊,咦?新版本出了耶! 拖啊,拖啊,咦?原来别的也可以替代耶! 拖啊,拖啊,咦...

  • 从win10主机传文件到vmware虚拟机centos系统的几种

    前提是已经安装了vmware tools 直接拖拽法 如果已经安装好了vmware-tools,可以直接拖win1...

  • 拖,拖,拖……

    今天忘事,险些致祸。那口子生气,指责进行时。 我正哄娃,挂了电话。他还不解气,又教训,想让我认识到错误。 我幸好平...

  • 拖、拖、拖

    拖、拖、拖,再拖就把自己拖出去宰了! …… 今天qq弹出了一个消息,我点进邮箱一看,收到了两年前的自己给今天的自己...

  • 拖,拖,拖

    月底才更视频,再等等! 五月了,一号更视频,上司一个电话聊产品培训近一小时,再查下资料。一下又到晚上十一点了,睡觉...

  • 明明知道,却还是跳不出这坑

    我明明已经知道了控制我的模式,也好像和它分开了,但就在刚刚,我又被那惯性拽了回来。 从上面的文字,就可以看出来,我...

  • 早起改变人生

    我从来没都不是一个可以早起的人,一直以来除了要上班不得不早起,其他的时间我则是能拖就拖,哪怕我已经醒了我依然可以在...

  • 我拽了生活的后腿

    可视为一场浩劫 空空如也 精神成了唯一支柱 更象恐惶的基石 计较,吝啬被生活放大 在崩溃的边缘游走 柴米油盐油尤为...

  • 我是不是太拽了?

    今天比较忙,主要分为以下几点: 1.今天上线了几个项目,如此,引出一个问题。 什么叫项目管理? 好吧我现在不懂,我...

  • 我拽了女孩的头发

    “宝贝,今天在幼儿园过得开心吗” “有一丢丢不开心。” “怎么了?犯错误了?被老师批评了?” “算是吧,我还是不说...

网友评论

      本文标题:已经可以拖拽了

      本文链接:https://www.haomeiwen.com/subject/spxpdjtx.html