//
// 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()
}
已经可以拖拽了
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...