我是以编程方式创建按钮的,CGAffineTransform
在添加addTarget
时在我的项目中不起作用,为什么?
编辑:
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)
})
}
}
}
答案 0 :(得分:2)
在函数中,不使用sender.transform,而是使用btnButton.transform,这是因为你超出范围而导致发件人可能被解散,导致动画被解雇。
另一个选择是强力保持对象:
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
根据您的代码,有两个问题:
您没有设置标记,然后在检入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的按钮时,它将起作用