Swift 3中的手势有什么不同?
我不知道为什么我的代码不起作用:Swift 3中的手势有什么不同?,swift,uitapgesturerecognizer,Swift,Uitapgesturerecognizer,我不知道为什么我的代码不起作用: let profileImageView: UIImageView = { let image = UIImageView() image.image = UIImage(named: "gameofthrones_splash") image.translatesAutoresizingMaskIntoConstraints = false image.contentMode = .scaleAspectFill let
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中(我可以看到它)
但当我点击控制台时,控制台中没有返回任何内容!WTF?好的,解决方案其实很简单。您必须使其成为一个懒惰的var,而不是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
}()
好的,解决办法其实很简单。您必须使其成为一个懒惰的var,而不是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
}()
它在靶子里。当放置在viewDidLoad()中时,此选项起作用:
目标是“self”,即UIViewController(不是UIImageView)。在大多数情况下(我确信存在异常值),您希望在视图中记录手势,但在视图控制器中使用该手势。它在目标中。当放置在viewDidLoad()中时,此选项起作用: 目标是“self”,即UIViewController(不是UIImageView)。在大多数情况下(我确信存在异常值),您希望在视图中记录手势,但在视图控制器中使用该手势。Swift 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")
}
只是为了测试我删除的图像,你可以添加它。但它工作得很好。Swift 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")
}
只是为了测试我删除的图像,你可以添加它。但它工作正常。我使用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")
}
我使用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")
}
尝试保留imageView。实例可能会被释放。全局初始化图像并向其添加手势。您的意思是什么?让image=UIImageView()将其放在其他位置,例如viewDidLoad并在此方法中使用image变量尝试保留imageView。实例可能会被释放。全局初始化图像并向其添加手势。你的意思是什么?让image=UIImageView()将其放在其他位置,例如viewDidLoad并在该方法中使用图像变量否,但我只需要添加一个惰性…它是固定的。否,但我只需添加一个惰性…它是固定的。