Почему распознаватель жестов касания не работает при создании переменной?

Я новичок в Swift, и я работал над проектом и столкнулся с особой проблемой, которую я исправил, но не был совершенно уверен, почему решение сработало.

У меня есть класс UserViewController где я делаю что-то вроде:

class UserViewController: UIViewController {

    let profileImageView: UIImageView = {
        let imageView = UIImageView()
        imageView.image = UIImage(named: "profilepic")
        imageView.translatesAutoresizingMaskIntoConstraints = false
        imageView.contentMode = .scaleAspectFit
        imageView.frame = CGRect.init(x: 0, y: 0, width: 30, height: 30) //CGRectMake(0, 0, 30, 30)
        imageView.layer.cornerRadius = 0.5 * imageView.bounds.size.width
        imageView.clipsToBounds = true

        return imageView
    }()

    override func viewDidLoad() {
        super.viewDidLoad()
        setupView()
    }

    func setupView() {
        view.addSubview(profileImageView)

        profileImageView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
        profileImageView.topAnchor.constraint(equalTo:topLayoutGuide.bottomAnchor, constant: 24).isActive = true
        profileImageView.widthAnchor.constraint(equalToConstant: 80).isActive = true
        profileImageView.heightAnchor.constraint(equalToConstant: 80).isActive = true
        let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(handleSelectProfilePicture))
        profileImageView.addGestureRecognizer(tapGestureRecognizer)
        profileImageView.isUserInteractionEnabled = true
}

Я пытался добавить распознаватель жестов UIImageView, То, что я делал раньше, фактически добавляло распознаватель в мою инициализацию для profileImageView как это:

let profileImageView: UIImageView = {
        let imageView = UIImageView()
        imageView.image = UIImage(named: "profilepic")
        imageView.translatesAutoresizingMaskIntoConstraints = false
        imageView.contentMode = .scaleAspectFit
        imageView.frame = CGRect.init(x: 0, y: 0, width: 30, height: 30) //CGRectMake(0, 0, 30, 30)
        imageView.layer.cornerRadius = 0.5 * imageView.bounds.size.width
        imageView.clipsToBounds = true
        let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(handleSelectProfilePicture))
    profileImageView.addGestureRecognizer(tapGestureRecognizer)
    profileImageView.isUserInteractionEnabled = true
        return imageView
    }()

Когда я делал это, распознаватель не работал (я нажимал на изображение, и ничего не происходило, функция обработчика никогда не вызывалась). Когда я вытащил три строки, которые создали / добавили распознаватель жестов к моему изображению, и переместил их в setupView() кран был распознан, и все заработало как положено.

Для лучшего понимания, почему это так? Почему я не могу добавить распознавание жеста при инициализации представления моего изображения и заставить его работать?

Заранее спасибо.

1 ответ

Вы изменяли еще не возвращенную переменную в этих двух строках в старом коде:

profileImageView.addGestureRecognizer(tapGestureRecognizer)
profileImageView.isUserInteractionEnabled = true

замещать profileImageView с imageView и это будет работать.

Другие вопросы по тегам