Library / Drag, swipe & scroll
Drag: pick up and drop
Dragging a card or icon: a soft lift when it detaches, a rigid thud when it lands.
import SwiftUI
struct DraggableCard: View {
@State private var offset: CGSize = .zero
@State private var dragging = false
private let lift = UIImpactFeedbackGenerator(style: .soft)
private let drop = UIImpactFeedbackGenerator(style: .rigid)
var body: some View {
RoundedRectangle(cornerRadius: 16)
.fill(.blue.gradient)
.frame(width: 140, height: 90)
.scaleEffect(dragging ? 1.06 : 1.0)
.shadow(radius: dragging ? 12 : 2)
.offset(offset)
.gesture(
DragGesture()
.onChanged { value in
if !dragging {
dragging = true
lift.impactOccurred(intensity: 0.6) // pick up
drop.prepare()
}
offset = value.translation
}
.onEnded { _ in
dragging = false
drop.impactOccurred() // land
withAnimation(.spring) { offset = .zero }
}
)
.animation(.spring(duration: 0.2), value: dragging)
}
}