这是一个示例视图:
我想计算一个框架CGPoint
我可以在哪里生成另一张卡(UIView
)而不触及任何现有卡。当然,这是可选的,因为视图可能充满卡片,因此没有空闲位置。
这就是我如何在屏幕上看到任何卡片以及我的功能现在的样子:
func freeSpotCalculator() -> CGPoint?{
var takenSpots = [CGPoint]()
for card in playableCards{
takenSpots.append(card.center)
}
}
我不知道从哪里开始以及如何计算随机数CGPoint
屏幕上。随机帧具有相同的width
and height
作为屏幕上的卡片。
这种简单的方法非常简单,但一旦屏幕填满,可能会出现问题。生成一个随机 CGPoint,其 x 坐标介于 0 和屏幕宽度之间,y 坐标介于 0 和屏幕高度之间。检查以该点为中心的矩形是否与任何现有视图相交。如果没有,您就有随机位置。
当屏幕开始填满时,就会出现问题。那时,您可能会尝试许多随机点,然后才能找到放置卡片的位置。您也可能会遇到无法容纳更多卡片的情况。你怎么知道你已经达到了这个目标?您生成随机点的循环会永远运行吗?
更聪明的解决方案是跟踪屏幕上的可用空间。始终大致在这些自由空间内生成随机点。如果近似值足够接近,您可以使用网格来完成此操作。是否有一张卡片占据了每个网格位置?然后,当最大的可用空间小于卡片矩形的大小时,您就知道已经完成了。这比简单的方法要多做很多工作,但是当屏幕开始填满时,速度会更快,并且您会确定何时完成。
如果您知道您的屏幕空间总是比卡片可能占用的空间多,那么天真的方法就可以了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)