SwiftUI: ошибка в логике перетаскивания или это ошибка? - PullRequest
2 голосов
/ 09 июля 2019

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

import SwiftUI

struct ContentView : View {
    @State private var location = CGPoint.zero
    var body: some View {
        return Circle()
            .fill(Color.blue)
            .frame(width: 300, height: 300)
            .gesture(
                DragGesture(minimumDistance: 10)
                    .onChanged { value in
                        print("value.location")
                        print(value.location)
                        self.location = CGPoint(
                            x: value.location.x,
                            y: 0)
                }
        )
            .offset(x: self.location.x, y: self.location.y)
    }
}

#if DEBUG
struct ContentView_Previews : PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
#endif

Это приводит к поведению:

iphone capture

КакНасколько я могу судить, значение value.location в обратном вызове DragGesture onChanged не должно колебаться между числами, подобными этим.Глядя на журналы, цифры повсюду.Я что-то упустил?

1 Ответ

3 голосов
/ 09 июля 2019

DragGesture по умолчанию CoordinateSpace равно .local, что является пространством координат внутри вашего Circle. Что происходит, когда вы перемещаете Circle? Поскольку ваш палец не двигается, местоположение вашего пальца в геометрии Circle внезапно меняется, что заставляет Circle снова двигаться. Повторите до тошноты.

Попробуйте использовать CoordinateSpace.global:

DragGesture(minimumDistance: 10, coordinateSpace: .global)

Возможно, вы также захотите использовать value.translation вместо value.location, чтобы избежать начального прыжка, когда вы опускаете палец.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...