Swift 3 - CGAffineTransform 不起作用

Swift 3 - CGAffineTransform does not work

我正在以编程方式创建按钮,但在 addTarget 中添加时 CGAffineTransform 在我的项目中不起作用,为什么?

编辑:

func createButtonPuzzle(id: Int) {

     for i in 1...14 {

            let btnButton = UIButton(type: .roundedRect)
            btnButton.frame = CGRect(x: self.view.frame.size.width / 2, y: self.view.frame.size.height / 2, width: 100, height: 100)
            btnButton.backgroundColor = .blue
            btnButton.setTitle("iButton", for: .normal)
            btnButton.addTarget(self, action: #selector(moveButton(sender:)), for: .touchUpInside)

            view.addSubview(btnButton)   
     }
}


func moveButton(sender: UIButton) {

    if sender.tag == 1 {

        if sender.transform == CGAffineTransform.identity {

            UIView.animate(withDuration: 0.5, animations: 
            sender.transform = CGAffineTransform(translationX: 50, y: 100)

            })
        }                
    }
}

在函数中,没有使用sender.transform,而是使用btnButton.transform,这是因为你超出了作用域,sender可能会被dismiss,导致动画dismiss。

另一种选择是强力持有对象:

let tappedButton : UIButton = sender

然后使用 tappedButton

编辑

我的意思是这样的:

func moveButton(sender: UIButton) {

    if ((sender.tag == 1) && (sender == self.btnButton)) {

        if self.btnButton.transform == CGAffineTransform.identity {

            UIView.animate(withDuration: 0.5, animations: 
                self.btnButton.transform = CGAffineTransform(translationX: 50, y: 100)

            })
        }                
    }
}

编辑 - 2

根据你的代码有两个问题:

  1. 所有 14 个按钮都堆叠 1 个在另一个顶部,这意味着按钮 14 将成为最上面的按钮,而不是按钮 1。
  2. 您没有设置标签,然后在您检查 moveButton 时失败:

    func createButtonPuzzle(id: Int) {

     for i in 1...14 {
    
            let btnButton = UIButton(type: .roundedRect)
            btnButton.frame = CGRect(x: self.view.frame.size.width / 2, y: self.view.frame.size.height / 2, width: 100, height: 100)
            btnButton.backgroundColor = .blue
            btnButton.setTitle("iButton", for: .normal)
            btnButton.addTarget(self, action: #selector(moveButton(sender:)), for: .touchUpInside)
    
            **btnButton.tag = i // This is missing **
    
            view.addSubview(btnButton)   
     }
    

    }

然后这失败了: 如果sender.tag == 1 {

因此,要测试它并查看它是否正常工作,首先您需要从 14 到 1,然后从 1..<2 或将按钮重新定位在不同的位置,以便它真正起作用。

然后将设置标签,当点击带有标签 1 的按钮时它将起作用