基于派生的 CGRect 名称设置 UIButton 框架是否返回 CGRectZero?

Setting a UIButton frame based on a derived CGRect name is returning CGRectZero?

请查看下面的代码以了解我要实现的目标的要点,我将非常感谢有关如何实现它的建议。我正在使用 Swift:

var playBubblePosition = 1

var bubble1 = CGRect(x: 0, y: 0, width: 0, height: 0)
var bubble2 = CGRect(x: 0, y: 0, width: 0, height: 0)
var bubble3 = CGRect(x: 0, y: 0, width: 0, height: 0)
var bubble4 = CGRect(x: 0, y: 0, width: 0, height: 0)

override func viewDidLoad() {
    super.viewDidLoad()

//This isn't necessary to share (too long), but in my viewDidLoad
//method, I am setting the values of bubble1, bubble2, bubble3 and
//bubble4 based on screen size. It prints to the log correctly.

}

    //Do any initial animations once the view appears to the user. ------------------------------------
override func viewDidAppear(_ animated: Bool) {

    playBubble.frame = bubble1 //playBubble is a UIButton

}

//标记:- 交互

@IBAction func TEMP1(_ sender: Any) {

    playBubble.frame = CGRectFromString("bubble\(playBubblePosition)")
    self.view.layoutIfNeeded()

    playBubblePosition += 1

    if playBubblePosition == 5 {
        playBubblePosition = 1
    }
}

如果我设置:

  playBubble.frame = bubble1

它工作正常。但是,当尝试换出 bubble1、bubble2、bubble3 和 bubble4 中的数字时(因为它是唯一发生变化的东西),它将我的 playBubble (UIButton) 设置为 CGPoint(0,0)。

是什么导致了这种情况的发生?我知道它可能是 'badly formatted',但是在我的 CGRect 中换出这个数字的正确方法是什么?

非常感谢!

CGRectFromString 需要一个像 "{{10,20},{35,47}}" 这样的字符串,它可以解析并转换为 CGRect。它不能用于 select 来自顺序命名变量的值。您可以使用数组来做到这一点。

将气泡矩形放入数组文字中,并使用 playBubblePosition - 1 作为 select 所需的索引:

playBubble.frame = [bubble1, bubble2, bubble3, bubble4][playBubblePosition - 1]