gpt4 book ai didi

ios - 我的 UIButton 从随机位置开始,而不是从中心开始移动

转载 作者:行者123 更新时间:2023-11-28 15:58:19 27 4
gpt4 key购买 nike

在我的代码中,我希望 UIButton 从屏幕中央开始,然后在我单击它之后,我希望它移动到屏幕上的随机位置。所以我把它的代码放在我点击它后去一个随机位置,虽然问题是它是从一个随机位置开始而不是从中心开始。这是我的 ViewController.swift 的代码:

class ViewController: UIViewController {
@IBOutlet weak var btn: UIButton!

override func viewDidLoad() {
super.viewDidLoad()
btn.layer.cornerRadius = 10
btn.layer.position = CGPoint(x: self.view.center.x, y: self.view.center.y)
// Do any additional setup after loading the view, typically from a nib.
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func tapRandomBTN(_ sender: Any) {
let buttonWidth = btn.frame.width
let buttonHeight = btn.frame.height

// Find the width and height of the enclosing view
let viewWidth = btn.superview!.bounds.width
let viewHeight = btn.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.
btn.center.x = xoffset + buttonWidth / 2
btn.center.y = yoffset + buttonHeight / 2

}

最佳答案

正如@luk2302 在他的评论中指出的那样,您不能依赖 viewDidLoad 中的正确 View 框架。您需要将该逻辑移至 viewDidLayoutSubviews。

但是,请注意,如果有任何事情导致系统调用 viewDidLayoutSubviews,您的按钮将弹回到它的原始位置。

如果您希望它在移动到那里后保持在随机位置,您应该添加一个“wasRandomized” bool 实例变量,并使 viewDidLayoutSubviews 中的逻辑仅在您尚未将按钮随机化时将其移动到中心.

另请注意,您确实应该使用布局约束。为 x 位置创建一个布局约束,为 y 创建另一个布局约束,并在要移动按钮时修改它们的常量值。这样自动布局就不会将您的按钮位置移出您的下方。

关于ios - 我的 UIButton 从随机位置开始,而不是从中心开始移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41429734/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com