【发布时间】:2021-04-26 20:36:38
【问题描述】:
无论绘制的形状是什么,我都想从 touchesmoved 事件中获取最低和最高的 x 和 y 坐标。基本上我想创建一个包含形状的 cgrect 。我不知道该怎么做。
【问题讨论】:
标签: swift xcode uigesturerecognizer cgrect
无论绘制的形状是什么,我都想从 touchesmoved 事件中获取最低和最高的 x 和 y 坐标。基本上我想创建一个包含形状的 cgrect 。我不知道该怎么做。
【问题讨论】:
标签: swift xcode uigesturerecognizer 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。对minY 和maxY 执行相同操作。
一旦有了x 和y 的最大值和最小值,就可以轻松地将这些值转换为边界矩形。一些示例代码:
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)
【讨论】:
greatestFiniteMagnitude 和-greatestFiniteMagnitude。我将编辑我的答案。