Swift 通过拖动手势更改偏移时的不稳定视图
编辑:它在物理设备上看起来更糟,模拟器与gif相比 我有一个矩形网格。它们嵌套在HSTACK和VSTACK中。这个网格被放入一个ZStack中。我将这个手势附加到嵌套的网格上,看看当我拖动我的实现时会发生什么Swift 通过拖动手势更改偏移时的不稳定视图,swift,swiftui,Swift,Swiftui,编辑:它在物理设备上看起来更糟,模拟器与gif相比 我有一个矩形网格。它们嵌套在HSTACK和VSTACK中。这个网格被放入一个ZStack中。我将这个手势附加到嵌套的网格上,看看当我拖动我的实现时会发生什么 import SwiftUI import UIKit struct ContentView: View { @State var numCell: CGFloat = 20 @State var cellSize: CGFloat = 50 var body
import SwiftUI
import UIKit
struct ContentView: View {
@State var numCell: CGFloat = 20
@State var cellSize: CGFloat = 50
var body: some View {
return ZStack() {
Grid(numCell: $numCell, cellSize: $cellSize)
}.position(x: 0, y: 0).frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity).background(Color.blue)
}
}
struct Grid: View {
@Binding var numCell: CGFloat
@Binding var cellSize: CGFloat
@State var gridDraggedX: CGFloat = 0
@State var gridDraggedY: CGFloat = 0
@State var accumulatedGridDraggedX: CGFloat = 0
@State var accumulatedGridDraggedY: CGFloat = 0
var body: some View {
let drag = DragGesture().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
})
return HStack(spacing: 2) {
ForEach(0..<Int(numCell) - 1) { _ in
VStack(spacing: 2) {
ForEach(0..<Int(self.numCell) - 1) { _ in
Rectangle()
.fill(Color.red)
.frame(width: self.cellSize,
height: self.cellSize)
}
}
}
}.gesture(drag).background(Color.green).offset(x: gridDraggedX, y: gridDraggedY)
}
}
导入快捷界面
导入UIKit
结构ContentView:View{
@状态变量numCell:CGFloat=20
@状态变量cellSize:CGFloat=50
var body:一些观点{
返回ZStack(){
网格(numCell:$numCell,cellSize:$cellSize)
}.位置(x:0,y:0).帧(最小宽度:0,最大宽度:。无穷大,最小高度:0,最大高度:。无穷大).背景(颜色.蓝色)
}
}
结构网格:视图{
@绑定var numCell:CGFloat
@绑定变量cellSize:CGFloat
@状态变量gridDraggedX:CGFloat=0
@状态变量gridDraggedY:CGFloat=0
@状态变量AccumeratedGridRaggedx:CGFloat=0
@状态变量acgregatedgridraggedy:CGFloat=0
var body:一些观点{
让drag=DragGesture().onChanged({中的值
self.gridDraggedX=value.translation.width+self.AccumeratedGridDraggedx
self.gridDraggedY=value.translation.height+self.acgregatedGridDraggedy
}).onEnded({中的值
self.gridDraggedX=value.translation.width+self.AccumeratedGridDraggedx
self.gridDraggedY=value.translation.height+self.acgregatedGridDraggedy
self.aggregatedgridraggedx=self.gridDraggedX
self.aggregatedgridraggedy=self.gridDraggedY
})
回钉(间距:2){
ForEach(0..DragGesture(coordinateSpace:.global)请尝试.animation(nil)
。在某些情况下,这是我的解决方案。SwiftUI可能希望设置偏移量更改的动画,因此您必须禁用它。哦,我看到您发布了答案。