TapGestureRecognizer 这是使用点击手势识别器初始化图像视图的代码。
var drawerImageView :UIImageView = {
var drawerImageView = UIImageView()
drawerImageView.image = UIImage(systemName: "list.dash")
let tap = UITapGestureRecognizer(target: HomeViewController.self, action: #selector(tapFunction(sender:)))
tap.numberOfTapsRequired = 1
tap.numberOfTouchesRequired = 1
drawerImageView.addGestureRecognizer(tap)
drawerImageView.isUserInteractionEnabled = true
return drawerImageView
}()
下面我正在为图像视图设置约束。
drawerImageView.translatesAutoresizingMaskIntoConstraints = false
drawerImageView.leadingAnchor.constraint(equalTo: view.leadingAnchor,constant: 30).isActive = true
drawerImageView.topAnchor.constraint(equalTo: view.topAnchor,constant: 40).isActive = true
drawerImageView.widthAnchor.constraint(equalToConstant: 100).isActive = true
drawerImageView.heightAnchor.constraint(equalToConstant: 100).isActive = true
问题是只有当我将 width height 设置为超过 200 时我才无法听到 taps,然后只有我收到 tap 事件。
这是上述点击手势的 objc 方法,需要调用此方法,但我无法在此处接收控件。 @objc func tapFunction(发件人:UITapGestureRecognizer){ 打印(“图像点击”) } 这个问题不清楚。
你的问题对我来说有点难以注意到。但我相信你在接收触摸事件时遇到问题,如果是这样,问题就是这个。
在计算变量之外编写触摸事件。
import UIKit
class ViewController: UIViewController {
var drawerImageView :UIImageView = {
var drawerImageView = UIImageView()
drawerImageView.image = UIImage(systemName: "list.dash")
drawerImageView.isUserInteractionEnabled = true
return drawerImageView
}()
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(drawerImageView)
drawerImageView.translatesAutoresizingMaskIntoConstraints = false
drawerImageView.leadingAnchor.constraint(equalTo: view.leadingAnchor,constant: 30).isActive = true
drawerImageView.topAnchor.constraint(equalTo: view.topAnchor,constant: 40).isActive = true
drawerImageView.widthAnchor.constraint(equalToConstant: 100).isActive = true
drawerImageView.heightAnchor.constraint(equalToConstant: 100).isActive = true
let tap = UITapGestureRecognizer(target: self, action: #selector(tapFunction(sender:)))
tap.numberOfTapsRequired = 1
tap.numberOfTouchesRequired = 1
drawerImageView.addGestureRecognizer(tap)
}
@objc func tapFunction(sender:UITapGestureRecognizer) { print("image tap") }
}
如果你想在你的尺寸超过200时接收触摸,只需要在你的“tapFunction”中写一个if并检查你的图像尺寸是否超过200.
这与图像的大小无关,您实现导航控制器的方式不好。看来您正在将图像定位在隐藏的 navigationController topbar 下(我只是突出显示了隐藏的部分)。更改图像的位置,您会看到点击已运行,或者如果您点击图像中不在礼帽后面的部分,您的触摸将再次起作用。所以你的图像部分位于导航栏后面,所以触摸不会响应它。我看到你的导航代码,它不合适。
另外,如果你让你的 rootViewcontroller 直接加载 HomeViewcontroller,你会看到你的代码工作得很好,因为你的 navigationController 不会中断你的触摸事件。
window.rootViewController = HomeViewController()