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

How would I go about getting the lowest and highest coordinate numbers from touchpoints?

我想从 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)