addGestureRecognizer не запускает оператор if в swift4 - PullRequest
0 голосов
/ 03 января 2019

Я пытаюсь использовать оператор if, когда использование касается просмотра изображения, оно меняет ограничения.Прямо сейчас мой код изменяется от маленького к большому, но он не изменяется от большого к маленькому.Таким образом, оператор if работает только один раз, но не работает снова.

 var counter = 0

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)

        let tap = UITapGestureRecognizer(target: self, action: #selector(ViewController.handleRegisterC))
        FIRE.addGestureRecognizer(tap)
        FIRE.isUserInteractionEnabled = true
        print(counter)

    }
override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

        view.addSubview(FIRE)
    FIRE.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
    FIRE.topAnchor.constraint(equalTo: view.topAnchor, constant: 0).isActive = true



    FIRE.widthAnchor.constraint(equalToConstant: 400).isActive = true
    FIRE.heightAnchor.constraint(equalToConstant: 700).isActive = true
     FIRE.translatesAutoresizingMaskIntoConstraints = false



    @objc func handleRegisterC(sender: UIButton){

        counter += 1


        if counter % 2 == 0 {


            FIRE.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
            FIRE.topAnchor.constraint(equalTo: view.topAnchor, constant: 0).isActive = true


            FIRE.widthAnchor.constraint(equalToConstant: 400).isActive = true
            FIRE.heightAnchor.constraint(equalToConstant: 700).isActive = true
            FIRE.translatesAutoresizingMaskIntoConstraints = false

        }
        if counter % 2 == 1 {
            FIRE.topAnchor.constraint(equalTo: view.topAnchor, constant: 0).isActive = true
            FIRE.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: 0).isActive = true
            FIRE.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 0).isActive = true
            FIRE.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: 0).isActive = true
            FIRE.translatesAutoresizingMaskIntoConstraints = false


        }


    }



}

1 Ответ

0 голосов
/ 03 января 2019

Я не думаю, что if statement работает только один раз (вы можете поместить оператор печати в каждый блок для подтверждения).Я думаю, что проблема в том, что у вас есть два набора ограничений, которые активны одновременно.Что вы, вероятно, хотите сделать, это чередовать эти два набора;установка одного из них, чтобы быть активным, в то время как другой, чтобы быть неактивным.Попробуйте что-то вроде этого

enum Size {
    case big
    case small
}
var counter = 0

override func viewDidLoad() {
    super.viewDidLoad()
    view.addSubview(FIRE)
    changeSizeTo(.small)
}

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    let tap = UITapGestureRecognizer(target: self, action: #selector(ViewController.handleRegisterC))
    FIRE.addGestureRecognizer(tap)
    FIRE.isUserInteractionEnabled = true
}

private func changeSizeTo(_ size: Size) {
    FIRE.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = size == .small
    FIRE.topAnchor.constraint(equalTo: view.topAnchor, constant: 0).isActive = size == .small
    FIRE.widthAnchor.constraint(equalToConstant: 400).isActive = size == .small
    FIRE.heightAnchor.constraint(equalToConstant: 700).isActive = size == .small
    FIRE.topAnchor.constraint(equalTo: view.topAnchor, constant: 0).isActive = size == .big
    FIRE.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: 0).isActive = size == .big
    FIRE.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 0).isActive = size == .big
    FIRE.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: 0).isActive = size == .big
    FIRE.translatesAutoresizingMaskIntoConstraints = false
}

@objc func handleRegisterC(sender: UIButton){
    counter += 1
    changeSizeTo(counter % 2 == 0 ? .small : .big)
}
...