Разработка
Реагирование на жесты в SwiftUI: перетаскивание
Узнайте, как реализовать жесты перетаскивания в SwiftUI для создания плавных и интуитивно понятных перетаскиваемых элементов интерфейса.
В SwiftUI, если вам необходимо сгенерировать жест перетаскивания, который вызывает действие, используйте структуру DragGesture.
@State var isBeingDragged = false
var draggingGesture: some Gesture {
DragGesture()
.onChanged { _ in self.isBeingDragged = true }
.onEnded { _ in self.isBeingDragged = false }
}
Модификаторы onChanged(_:) и onEnded(_:) позволяют контролировать, что происходит, когда пользователь выполняет жест, и что происходит после его остановки.
При инициализации объекта жеста перетаскивания можно использовать инициализатор DragGesture(minimumDistance:coordinateSpace:), чтобы определить наименьшее расстояние перетаскивания для завершения жеста с помощью свойства minimumDistance, а также координатное пространство, в котором жест получает значения местоположения, с помощью свойства coordinateSpace.
struct DraggingPlaygroundView: View {
let circleSize: CGFloat = 75
@State var isDragging = false
@State var currentPosition: CGPoint = .zero
var draggingObject: some Gesture {
DragGesture(minimumDistance: 1, coordinateSpace: .local)
.onChanged { gesture in
self.isDragging = true
self.currentPosition = gesture.location
}
.onEnded { _ in self.isDragging = false }
}
var body: some View {
Circle()
.fill(Color.blue)
.shadow(color: .primary, radius: isDragging ? 3 : 0, x: 0, y: isDragging ? 5 : 0)
.frame(width: circleSize, height: circleSize, alignment: .center)
.position(currentPosition)
.gesture(draggingObject)
.onAppear {
setupView()
}
}
private func setupView() {
let initialX = UIScreen.main.bounds.width / 2
let initialY = UIScreen.main.bounds.height / 2
currentPosition = CGPoint(x: initialX, y: initialY)
}
}
-
Интегрированные среды разработки4 недели назадРасширение поддержки Swift в разных IDE
-
GitHub4 недели назадRoxum IDE — среда разработки для Android
-
Видео и подкасты для разработчиков2 недели назадКак копилот генерит код? Идем под капот
-
Новости3 недели назадВидео и подкасты о мобильной разработке 2026.16
