Жест увеличения SwiftUI onUpdate не срабатывает сразу на устройстве (работает на симуляторе) - PullRequest
0 голосов
/ 17 октября 2019

свойство onUpdate моего жеста увеличения немедленно запускается на симуляторе, но не на устройстве.

Я попытался удалить все остальные жесты. Кажется, не имеет значения. Пробовал на iOS 13.1 и 13.2 и xcode 11.1 и 11.2

import UIKit

struct ContentView: View {

    @State var gridDraggedX: CGFloat = 0
    @State var gridDraggedY: CGFloat = 0
    @State var accumulatedGridDraggedX: CGFloat = 0
    @State var accumulatedGridDraggedY: CGFloat = 0
    private var numCells: CGFloat = 10

    var dimension: CGFloat {
        numCells * cellSize
    }

    @State var initialCellSize: CGFloat = 50.0
    @State var cellSize: CGFloat = 50.0

    var body: some View {

        let dragGesture = DragGesture(minimumDistance: 5.0, coordinateSpace: .global)
            .onChanged({ value in
                self.gridDraggedX = value.translation.width + self.accumulatedGridDraggedX
                self.gridDraggedY = value.translation.height + self.accumulatedGridDraggedY
            }).onEnded({ value in
                self.gridDraggedX = value.translation.width + self.accumulatedGridDraggedX
                self.gridDraggedY = value.translation.height + self.accumulatedGridDraggedY
                self.accumulatedGridDraggedX = self.gridDraggedX
                self.accumulatedGridDraggedY = self.gridDraggedY
            })

        let dragGesture2 = DragGesture(minimumDistance: 0.0, coordinateSpace: .global)
            .onEnded({ value in
                if value.translation.width == 0 && value.translation.height == 0 {
                    print(value.startLocation)
                }
            })

        let magGesture = MagnificationGesture(minimumScaleDelta: 0.0).onChanged({ value in
                print(value)
                self.cellSize = self.initialCellSize * value
            }).onEnded({ value in
                self.cellSize = self.initialCellSize * value
                self.initialCellSize = self.cellSize
            })

        return ZStack(alignment: .topLeading) {
            GeometryReader { geometry in
                Path { path in
                    path.move(to: CGPoint(x:0, y: 0))
                    path.addLine(to: CGPoint(x: 0, y: self.dimension))
                    path.addLine(to: CGPoint(x: self.dimension, y: self.dimension))
                    path.addLine(to: CGPoint(x: self.dimension, y: 0))
                    path.addLine(to: CGPoint(x: 0, y: 0))
                }.fill(Color.red)
                Path { path in
                    for i in (0...Int(self.numCells)) {
                        path.move(to: CGPoint(x: 0 + CGFloat(i) * self.cellSize, y: 0))
                        path.addLine(to: CGPoint(x: 0 + CGFloat(i) * self.cellSize, y: self.dimension))
                    }
                    for i in (0...Int(self.numCells)) {
                        path.move(to: CGPoint(x: 0, y: 0 + CGFloat(i) * self.cellSize))
                        path.addLine(to: CGPoint(x: self.dimension, y: 0 + CGFloat(i) * self.cellSize))
                    }
                }.stroke(Color.blue)
                }.offset(x: gridDraggedX, y: gridDraggedY).simultaneousGesture(dragGesture).simultaneousGesture(dragGesture2).simultaneousGesture(magGesture)
        }
    }
}

Я ожидаю, что onUpdate magGesture сработает сразу, когда пользователь начнет пинчить. Он не срабатывает, пока magGesture onUpdate сразу. На симуляторе, используя

РЕДАКТИРОВАТЬ: так что на устройстве это выглядит просто привет привередливым. если один из двух ваших пальцев не двигается, он не срабатывает, пока значение не превысит определенный порог. уф

1 Ответ

0 голосов
/ 17 октября 2019

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

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