[英]how can I center two elements (without knowing their width) next to each other in Swift?
[英]How can I evenly scatter points without overlapping each other?
我想基于UIView的宽度和高度,均匀地散射星星来代表UIView中的夜空背景。 每颗恒星必须至少相隔20个像素。
我尝试了以下方法来生成X和Y点,但效率非常低并最终冻结了应用程序,因为随机生成的数字太频繁地与现有数组中的数字太相似,导致它无限循环。
func generateRandomNumber(maxValue: UInt32, uniquePoints: Set<Int>) -> Int {
let randomNumber = Int(arc4random_uniform(maxValue))
for point in uniquePoints {
if(abs(randomNumber - point) < 20) {
return generateRandomNumber(maxValue, uniquePoints)
}
}
return randomNumber
}
有没有更有效的方法来做到这一点?
最简单的方法是,如果它们需要相隔20个像素,则将您的区域划分为20 x 20格。 在每个20 x 20单元格中随机放置1颗星,但跳过每隔一列和每行。 所以它看起来像这样:
*-*-*-*-*
|-|-|-|-|
*-*-*-*-*
|-|-|-|-|
在上图中,其中带有*
单元格将具有单个星形。 与无论是细胞-
还是|
会是空的。
如果你想变得更复杂,你可以查找Poisson Disc 。 这是一种更复杂的方法,可以更优雅地实现您想要的效果。 但是,它有点难以理解,并且通常可能是计算密集型的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.