Отображение метки после UIPanGestureRecognizer

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

Функция, которая вызывается в UIPanGestureRecognizer:

func pullDownView(gesture: UIPanGestureRecognizer) {
    if(gesture.state == .changed) {
        if(iconImage.center.y - (iconImage.frame.size.height / 2) < view.frame.size.height / 3) {
            let translationY = gesture.translation(in: view).y
            iconImage.center.y += translationY

            gesture.setTranslation(CGPoint(x: 0, y: 0), in: view)
            iconImage.updateConstraints()
        }else{
            iconImage.isUserInteractionEnabled = false
            iconImage.center.y = (view.frame.size.height / 3) + (iconImage.frame.size.height / 2)
            iconImage.updateConstraints()
        }
    }

    if(gesture.state == .cancelled || gesture.state == .ended || gesture.state == .failed) {
        if(iconImage.center.y - (iconImage.frame.size.height / 2) >= view.frame.size.height / 6) {
            if(iconImage.center.y != (view.frame.size.height / 3) + (iconImage.frame.size.height / 2)) {
                iconImage.isUserInteractionEnabled = false
                iconImage.center.y = (view.frame.size.height / 3) + (iconImage.frame.size.height / 2)
                iconImage.updateConstraints()

                getAccounts()
            }
        }else{
            iconImage.center.y = view.frame.size.height / 2
            iconImage.updateConstraints()
        }
    }
}

func getAccounts() {
    noAccountsLabel = UILabel(frame: CGRect(x: 0, y: 0, width: view.frame.size.width, height: 50))
    noAccountsLabel.text = "No accounts found!"
    noAccountsLabel.font = UIFont(name: "Verdana", size: 20)
    noAccountsLabel.textAlignment = .center
    noAccountsLabel.center = CGPoint(x: view.frame.size.width / 2, y: noAccountsLabel.frame.size.height * 2)

    view.addSubview(noAccountsLabel)
}

Спасибо за помощь! Стеф.

1 ответ

func getAccounts() {
  let noAccountsLabel = UILabel(frame: CGRect(x: 0, y: 0, width: view.frame.size.width, height: 50))
  noAccountsLabel.text = "No accounts found!"
  noAccountsLabel.font = UIFont(name: "Verdana", size: 20)
  noAccountsLabel.textAlignment = .center
  noAccountsLabel.center = CGPoint(x: view.frame.size.width / 2, y: noAccountsLabel.frame.size.height * 2)

  view.addSubview(noAccountsLabel)
}

Работал на меня.

PS: возможно, я неправильно сделал логику, но вы можете использовать guard независимо от того, чтобы прояснить некоторые if заявления:

guard gesture.state == .cancelled || gesture.state == .ended || gesture.state == .failed else  { return }

guard (iconImage.center.y - (iconImage.frame.size.height / 2) >= view.frame.size.height / 6) else { return }

if(iconImage.center.y != (view.frame.size.height / 3) + (iconImage.frame.size.height / 2)) {
  iconImage.isUserInteractionEnabled = false
  iconImage.center.y = (view.frame.size.height / 3) + (iconImage.frame.size.height / 2)
  iconImage.updateConstraints()

  getAccounts()
}
Другие вопросы по тегам