Почему распознаватель жестов касания не работает при создании переменной?
Я новичок в 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
и это будет работать.