![](/img/trans.png)
[英]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.