gpt4 book ai didi

swift - 同时移动所有矩形的点

转载 作者:搜寻专家 更新时间:2023-10-31 19:37:53 24 4
gpt4 key购买 nike

我正在为应用构建矩形编写代码。我可以使用鼠标左键 (LMB) 单独移动矩形的点。

如何同时移动矩形的所有四个点

操作原理:如果我用 鼠标左键 拖动 1 个点,其他 3 个点将同时以相同的偏移量跟随它。

enter image description here

元素是这样构造的:

enum RectPoint {

case point1(point: CGPoint)
case point2(point: CGPoint)
case point3(point: CGPoint)
case point4(point: CGPoint)

func pointCoord() -> [CGPoint] {
switch self {
case .point1(let point): return [point]
case .point2(let point): return [point]
case .point3(let point): return [point]
case .point4(let point): return [point]
}
}
..........................
}

class SpecialView: NSView {

var array: [RectPoint] = []
private var trackVertex: RectPoint?
private var trackVertexIndex: Int?
private var trackElementIndex: Int?

..........................

private func updateDragging(point: CGPoint) {
guard let trackVertex = self.trackVertex,
let trackVertexIndex = self.trackVertexIndex,
let trackElementIndex = self.trackElementIndex
else {
return
}

let newVertex = trackVertex.debugReleaseChecking(point,
atElementIndex: trackElementIndex)

array[trackVertexIndex] = newVertex
self.needsDisplay = true
}
}

这里有一个用 LMB 拖动的方法:

func mouseDragged(event: NSEvent) {

var point = self.convertPoint(event.locationInWindow, fromView: nil)
updateDragging(point)
}

我需要一个代码(或伪代码)允许我一次拖动任何矩形的所有四个点。

最佳答案

基本上,您需要计算应用于跟踪点的偏移量并将该偏移量应用于所有其他点。最简单的做法是将计算和更新分开,因此更新始终在所有点上运行。

要计算偏移量,只需从新点 x 和 y 中减去当前点 x 和 y。

类似的东西:

func mouseDragged(event: NSEvent) {
let eventPoint = self.convertPoint(event.locationInWindow, fromView: nil)
let trackingPoint = XXX

let xOffset = eventPoint.x - trackingPoint.x
let yOffset = eventPoint.y - trackingPoint.y

for point in allPoints {
point.x += xOffset
point.y += yOffset
}
}

关于swift - 同时移动所有矩形的点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38420224/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com