同时移动矩形的四个点

问题描述 投票:0回答:1

我正在开发一个生成矩形的 macOS 应用程序。我可以用鼠标左键LMB单独移动矩形的点。操作原理:当我用LMB拖动1个点时,其他3个点会同时跟随它,并具有相同的偏移量。

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

构造元素的代码:

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
    }
}

以下是拖动点的方法:

func mouseDragged(event: NSEvent) {        
   var point = self.convertPoint(event.locationInWindow, fromView: nil)
   updateDragging(point) 
}
swift macos core-graphics cgpoint nsevent
1个回答
1
投票

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

要计算偏移量,只需从新点 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
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.