[英]Swift: How to make a label in the borders of the screen?
我正在嘗試創建一個在屏幕上隨機生成標簽的游戲,但是整個單詞必須在屏幕內。 屏幕上還有一個文本字段,打算將這些單詞放在下面。
我有一個用於添加標簽的功能,另一個用於確保它在邊界內。
func addWord(word: String) {
let screenSize: CGRect = UIScreen.mainScreen().bounds
let screenWidth = UInt32(screenSize.width)
let screenHeight = UInt32(screenSize.height)
let label = UILabel()
label.text = word
label.font = UIFont.systemFontOfSize(32)
label.sizeToFit()
label.backgroundColor = UIColor.whiteColor()
let x = CGFloat(arc4random_uniform(screenWidth))
let y = CGFloat(arc4random_uniform(screenHeight))
label.center = CGPointMake(x, y)
label.center = checkBounds(label, minX: 0, maxX: CGFloat(screenWidth), minY: (newWordsTextField.bounds.origin.y+newWordsTextField.bounds.maxY), maxY: CGFloat(screenHeight))
view.addSubview(label)
let panGesture = UIPanGestureRecognizer(target: self, action: #selector(ViewController.handlePanGesture(_:)))
label.addGestureRecognizer(panGesture)
label.userInteractionEnabled = true
}
func checkBounds(label: UILabel, minX: CGFloat, maxX: CGFloat, minY: CGFloat, maxY: CGFloat)->CGPoint{
let borders = label.bounds
var newCenter = label.center
if borders.minX < minX {
newCenter.x = newCenter.x + (minX-borders.minX)
}
if borders.maxX > maxX {
newCenter.x = newCenter.x-(borders.maxX-maxX)
}
if borders.minY < minY {
newCenter.y = newCenter.y + (minY-borders.minY)
}
if borders.maxY > maxY {
newCenter.y = newCenter.y-(borders.maxY-maxY)
}
return newCenter
}
但是由於某種原因,即使函數應確保不會發生這種情況,標簽也會越過邊界。 我是新手,這是我第一次嘗試這樣的事情,請幫忙,我在做什么錯?
如果您使用的是自動版式(幾乎可以肯定是因為這是默認設置,必須手動將其關閉),則視圖對象的框架和中心會被自動版式約束所覆蓋(無論是您定義還是系統創建的約束)自動)。
如果要手動添加視圖,則還需要添加約束。 那應該解決您的問題。 我建議使用谷歌搜索“通過代碼添加UIViews和約束”或類似的方法來查找有關如何完成操作的教程(或者更好的方法是在情節提要中添加視圖並將其標記為隱藏,直到需要它們為止。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.