Как ограничить жест перетаскивания определенным кадром только в SwiftUI

Я хочу перетащить круг только в пределах горизонтального кадра. Я пробую приведенный ниже код, вы можете видеть, что форма работает идеально горизонтально, а также с левой стороны, но при перетаскивании правой стороны форма перетаскивается за пределы рамки устройства. Я проверяю так много ответов, но ничего не работало. также попробуйте добавить.onEndedно не работает. пожалуйста, помогите мне заранее спасибо вот код, который я пробовал

struct ProgressIndicator: View {
    @State private var position = CGSize.zero
    var body: some View {
        GeometryReader { geometry in
            VStack(alignment: .leading) {
                ZStack {
                    Circle()
                        .foregroundColor(Color.blue)
                        .opacity(0.3)
                        .frame(width: 40, height: 40, alignment: .leading)
                        .padding(.bottom, -12)
                }
                .gesture(
                     DragGesture()
                    .onChanged({ (value) in
                            self.position.width += value.location.x
                    })
                )
                .offset(x: self.position.width - 20, y: 0)
            }
        }
    }
} 

вот скриншот формы круга для перетаскивания влево и вправо

1 ответ

Решение

Вы можете ограничить позицию с помощью GeometryReader:

self.position.width = min(self.position.width + value.location.x, geometry.size.width / 2)

Вот результат Playgrounds:

https://imgur.com/FA5xyAz

Другие вопросы по тегам