Swift 3 - CGAffineTransform不起作用

时间:2017-07-31 14:28:44

标签: swift uiview uibutton cgaffinetransform

我是以编程方式创建按钮的,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)

            })
        }                
    }
}

1 个答案:

答案 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

根据您的代码,有两个问题:

  1. 所有14个按钮叠放在另一个上面,这意味着按钮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)   
     }
    

    }

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

    因此,为了测试它并看到它正常工作,首先你需要从14到1并且只需从1 ...< 2或者将按钮重新定位在不同的位置,这样它才能真正起作用。

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