[英]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.