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