我正在尝试创建一个在屏幕上随机生成标签的游戏,但整个单词必须在屏幕内。我在屏幕上还有一个文本字段,我打算将文字放在下面。
我有一个用于添加标签的函数,还有一个用于确保它位于边框内的函数。
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
}
但由于某种原因,标签不断超出边界,即使该函数应该确保这种情况不会发生。我对 swift 有点陌生,这是我第一次尝试这样的事情,请帮忙,我做错了什么?
最佳答案
如果您正在使用自动布局(几乎可以肯定是因为它是默认设置,您必须手动将其关闭),那么 View 对象的框架和中心将被自动布局约束覆盖(一旦您定义或系统自动创建。)
如果您要手动添加 View ,那么您还需要添加约束。这应该可以解决你的问题。我建议谷歌搜索“通过代码添加 UIViews 和约束”或类似的内容来查找有关如何完成的教程(或者更好的是,只需在 Storyboard中添加 View 并将它们标记为隐藏,直到需要它们为止。
关于ios - Swift:如何在屏幕边框上制作标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38402712/