在创建变量时,为什么没有轻敲手势识别器?

时间:2017-07-21 13:50:24

标签: ios swift3 uiimageview uitapgesturerecognizer

我是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 个答案:

答案 0 :(得分:3)

您在旧代码中修改了这两行中尚未返回的变量:

profileImageView.addGestureRecognizer(tapGestureRecognizer)
profileImageView.isUserInteractionEnabled = true

profileImageView替换为imageView,它将有效。