J. *_*Doe 5 math uiview ios swift
这是一个示例视图:
我想计算一个框架CGPoint
,我可以在那里生成另一张卡片(UIView
)而不触及任何现有的卡片.当然,它是可选的,因为视图可以充满卡片,因此没有免费的地方.
这就是我在屏幕上看到任何卡片以及我的功能现在如何:
func freeSpotCalculator() -> CGPoint?{
var takenSpots = [CGPoint]()
for card in playableCards{
takenSpots.append(card.center)
}
}
Run Code Online (Sandbox Code Playgroud)
我不知道从哪里开始以及如何CGPoint
在屏幕上计算随机数.随机帧具有相同的width
并height
为屏幕上的卡片英寸
对此的幼稚方法非常简单,但一旦屏幕填满就可能会出现问题。生成一个随机 CGPoint,x 坐标在 0 和屏幕宽度之间,y 坐标在 0 和屏幕高度之间。检查以该点为中心的矩形是否与任何现有视图相交。如果没有,则您的位置是随机的。
出现问题的地方是屏幕开始填满时。那时,您可能会在找到放置卡片的位置之前尝试许多随机点。您也可能会遇到无法容纳更多卡片的情况。你怎么知道你已经达到了?生成随机点的循环会永远运行吗?
一个更聪明的解决方案是跟踪屏幕上的可用空间。始终在这些自由空间内大致生成随机点。如果近似值足够接近,您可以使用网格来执行此操作。是否有一张卡占据每个网格位置?然后,当最大可用空间小于卡片矩形的大小时,您就知道大功告成了。这比幼稚的方法要多得多,但是当屏幕开始填满时它会更快,并且您会确定何时完成。
如果你知道你的屏幕空间总是比卡片可能占用的多,那么简单的方法就可以了。
小智 0
正如我在图片中看到的,所有卡片都在视图底部对齐。所以如果你生成一个随机的 y 位置,0 to origin of your cards row - one card height
你可以简单地根据你的视图框架和卡片的大小获得 CGPoint。