2016-11-20 54 views
0

我不知道为什么我的代码不工作:Swift 3中的AddGesture不同?

let profileImageView: UIImageView = { 
    let image = UIImageView() 
    image.image = UIImage(named: "gameofthrones_splash") 
    image.translatesAutoresizingMaskIntoConstraints = false 
    image.contentMode = .scaleAspectFill 
    let tapGesture = UITapGestureRecognizer(target: self, action: #selector(handleSelectProfileImageView)) 
    image.addGestureRecognizer(tapGesture) 
    image.isUserInteractionEnabled = true 

    return image 
}() 

这ImageView的是在viewDidLoad中加载(我可以看到它)

func handleSelectProfileImageView() { 
    print("123") 
} 

但没有在控制台中看到回来的时候我'点击它! WTF?

+0

设法留住ImageView的。实例可能会被释放。全局初始化图像并添加手势。 – Gyanendra

+0

你是什么意思? – petaire

+0

让图像= UIImageView()把它放在其他地方,如viewDidLoad和在这个方法里面使用图像变量 – Gyanendra

回答

1

它在目标中。这部作品在viewDidLoad中()时,地点:

profileImageView.frame = CGRect(x: 60, y: 60, width: 70, height: 70) 
view.addSubview(profileImageView) 
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(handleSelectProfileImageView)) 
profileImageView.addGestureRecognizer(tapGesture) 

的目标是 “自我”,这是的UIViewController(而不是UIImageView的)。在大多数情况下(我确定存在异常值),您希望在视图中记录手势,但在视图控制器中使用手势。

+0

不,但我只是不得不添加一个懒惰......它是固定的。 – petaire

1

好的解决方案其实很简单。你必须让它成为一个懒惰的变量而不是let。

lazy var profileImageView: UIImageView = { 
    let image = UIImageView() 
    image.image = UIImage(named: "gameofthrones_splash") 
    image.translatesAutoresizingMaskIntoConstraints = false 
    image.contentMode = .scaleAspectFill 
    let tapGesture = UITapGestureRecognizer(target: self, action: #selector(handleSelectProfileImageView)) 
    image.addGestureRecognizer(tapGesture) 
    image.isUserInteractionEnabled = true 

return image 
}() 
0

雨燕3.0: 有一些错误,我删除它 - 将这个代码在viewDidLoad中

override func viewDidLoad() { 
     super.viewDidLoad() 

     var profileImageView:UIImageView { 
      var image = UIImageView() 
      image.backgroundColor = UIColor.red; 
      image.frame = CGRect(x: 0, y: 0, width: 44, height: 44) 
      image.translatesAutoresizingMaskIntoConstraints = false 
      image.contentMode = .scaleAspectFill 
      let tapGesture = UITapGestureRecognizer(target: self, action: #selector(handleSelectProfileImageView)) 
      image.addGestureRecognizer(tapGesture) 
      image.isUserInteractionEnabled = true 

      return image 
     } 

     view.addSubview(profileImageView); 


     // Do any additional setup after loading the view. 
    } 

func handleSelectProfileImageView() { 
     print("123") 
    } 

只是为了测试我删除的图像,你可以添加它。但它工作正常。

0

我固定使用的UIButton这个问题 - >

let profileImageView: UIButton = { 
    let iv = UIButton() 
    let image = UIImage(named: "r2d2") 
    iv.setImage(image, for: .normal) 
    iv.translatesAutoresizingMaskIntoConstraints = false 
    iv.addTarget(self, action: #selector(selectProfileImage), for: .touchUpInside) 
    iv.isUserInteractionEnabled = true 
    return iv 
}() 

@objc func selectProfileImage(){ 
    print("Hello") 
}