我将如何从接触点获取最低和最高坐标数?

问题描述

无论绘制的形状是什么,我都想从 touchesmoved 事件中获得最低和最高的 x 和 y 坐标。基本上我想创建一个包含形状的 cgrect 。我不知道该怎么做。

解决方法

有多种方法可以做到这一点。

UIBezierPath 有一个 bounds 方法,它会给你一个包含路径中所有点的边界矩形。如果您正在将您的形状构建成一个 UIBezierPath,这应该是您所需要的。

如果您需要自己跟踪边界,请设置一些变量并根据需要进行调整:

var minY = CGFloat.greatestFiniteMagnitude
var maxY = -CGFloat.greatestFiniteMagnitude

var minX = CGFloat.greatestFiniteMagnitude
var maxX = -CGFloat.greatestFiniteMagnitude

当您从用户那里收集点数时,如果 x 坐标为 < minX,请更新 minX。如果是 > maxX,则更新 maxX。对 minYmaxY 执行相同操作。

一旦您拥有 xy 的最大值和最小值,将这些值转换为边界矩形就很简单了。一些示例代码:

extension CGRect {
    init(minX: CGFloat,minY: CGFloat,maxX: CGFloat,maxY: CGFloat) {
        self.init()
       origin = CGPoint(x: minX,y: minY)
       size = CGSize(width: maxX - minX,height: maxY - minY)
   }
}


let aMinX: CGFloat = CGFloat(Int.random(in: 0...50))
let aMinY: CGFloat = CGFloat(Int.random(in: 0...50))
let aMaxX: CGFloat = CGFloat(Int.random(in: 60...200))
let aMaxY: CGFloat = CGFloat(Int.random(in: 60...200))
let aRect: CGRect = CGRect(minX: aMinX,minY: aMinY,maxX: aMaxX,maxY: aMaxY)
print(aRect)