如何解决我将如何从接触点获取最低和最高坐标数?
无论绘制的形状是什么,我都想从 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
。对 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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。