2016-08-17 79 views
2

我試圖將一個標籤移動到一個隨機位置,我已經能夠使用此代碼做到這一點。(Swift)將按鈕移動到隨機位置有例外

let buttonWidth = self.samea.frame.width 
     let buttonHeight = self.samea.frame.height 

     // Find the width and height of the enclosing view 
     let viewWidth = self.samea.superview!.bounds.width 
     let viewHeight = self.samea.superview!.bounds.height 

     // Compute width and height of the area to contain the button's center 
     let xwidth = viewWidth - buttonWidth 
     let yheight = viewHeight - buttonHeight 

     // Generate a random x and y offset 
     let xoffset = CGFloat(arc4random_uniform(UInt32(xwidth))) 
     let yoffset = CGFloat(arc4random_uniform(UInt32(yheight))) 

     // Offset the button's center by the random offsets. 
     self.newButtonX = xoffset + buttonWidth/2 
     self.newButtonY = yoffset + buttonHeight/2 
     self.samea.center.x = self.newButtonX! 
     self.samea.center.y = self.newButtonY! 

問題是,我在故事板上有一些按鈕和標籤,我不希望按鈕產生在這些按鈕之上。不知道該怎麼做。任何幫助表示讚賞!

+0

你可以添加圖像究竟發生了什麼。 –

+0

http://imgur.com/a/rInvX @VirajPadsala我在底部附近有兩個粉紅色的按鈕。我的其他按鈕隨機出現在屏幕上的任何位置。我希望它在出現時避免與兩個粉紅色按鈕接觸。 – Ash

回答

2

您可以創建所有UIButtonUILabel網點的陣列屬性,並將其填充到viewDidLoad(_:)方法中。然後當你生成你的隨機值時,你可以把它們放在一個while循環中並循環訪問這些值。

就是這樣。

let buttonsAndLabels = [UIView]() 
var xoffset: CGFloat 
var yoffset: CGFloat 
var isOccupied = true 
while isOccupied { 
    xoffset = CGFloat(arc4random_uniform(UInt32(xwidth))) 
    yoffset = CGFloat(arc4random_uniform(UInt32(yheight))) 
    let frame = CGRect(x: xoffset, y: yoffset, width: buttonWidth, height: buttonHeight) 

    isOccupied = false 
    for view in buttonsAndLabels { 
    if view.frame.intersects(frame) { 
     isOccupied = true 
    } 
    } 
}