Как добавить ограничения для UIButton и заставить его двигаться после действия программно? - PullRequest
0 голосов
/ 26 марта 2019

Я использую несколько кокапод (DKCircleButton = UIButton, созданный в OBJ-c) в своем проекте, и я пытаюсь добавить ограничения и заставить мою кнопку перемещаться в нижнюю часть после нажатия пользователем. Я испробовал все возможные решения, но ни одно из них не сработало.

Вот код, который у меня есть.

override func viewDidLoad() {
    super.viewDidLoad()

    let button = DKCircleButton(frame: CGRect(x: 0, y: 0, width: 150, height: 150))
    button.center = CGPoint(x: 160, y: 200)
    button.setTitle("Отмазаться", for: .normal)
    button.titleLabel?.font = UIFont.systemFont(ofSize: 20)
    button.addTarget(self, action: #selector(buttonPressed), for: .touchUpInside)
    button.animateTap = true
    button.backgroundColor = UIColor(red: 230/255, green: 103/255, blue: 103/255, alpha: 1.0)
    self.view.addSubview(button)

    let xPosition:CGFloat = 110
    let yPosition:CGFloat = 200
    let buttonWidth:CGFloat = 150
    let buttonHeight:CGFloat = 150

    button.frame = CGRect(x:xPosition, y:yPosition, width:buttonWidth, height:buttonHeight)

}

@objc func buttonPressed(sender: DKCircleButton) {
    // here's should be action associated with a tap, but it doesn't work at all
    // for example, I've tried to change the title of the bottom but this function doesn't recognise the "bottom" identifier
    print("got it")
}

1 Ответ

1 голос
/ 26 марта 2019

Основная проблема на самом деле очень распространенная: вы пытаетесь получить доступ к переменной вне области, где она определена. Ваш let button определен внутри viewDidLoad() и, таким образом, доступен только из viewDidLoad(). Чтобы можно было что-то изменить в другой функции, вы можете сделать более глобальную ссылку, а затем загрузить ее в viewDidLoad(), например:

var button : DKCircleButton!

override func viewDidLoad() {
    super.viewDidLoad()

    button = DKCircleButton(frame: CGRect(x: 0, y: 0, width: 150, height: 150))
    button.center = CGPoint(x: 160, y: 200)
    button.setTitle("Отмазаться", for: .normal)
    ....//no more changes here

}

@objc func buttonPressed(sender: DKCircleButton) {
    var newFrame = button.frame
    newFrame.width = 200 // You can change whatever property you want of course, this is just to give an example.
    button.frame = newFrame

    print("got it")
}

Убедитесь, что переменная кнопки находится в том же классе, но вне любой другой функции.

...