Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 通过拖动手势更改偏移时的不稳定视图_Swift_Swiftui - Fatal编程技术网

Swift 通过拖动手势更改偏移时的不稳定视图

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

编辑:它在物理设备上看起来更糟,模拟器与gif相比

我有一个矩形网格。它们嵌套在HSTACK和VSTACK中。这个网格被放入一个ZStack中。我将这个手势附加到嵌套的网格上,看看当我拖动我的实现时会发生什么

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可能希望设置偏移量更改的动画,因此您必须禁用它。哦,我看到您发布了答案。