Swift:UITapGestureRecognizer -无法监听imageView的手势

lqfhib0f  于 2023-03-07  发布在  Swift
关注(0)|答案(2)|浏览(112)

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

问题是我不能听水龙头,只有当我设置的宽度高度超过200,然后只有我收到水龙头事件。
这是上述点击手势的objc方法,需要调用此方法,但我无法在此处接收控件。@objc func tapFunction(sender:UITapGestureRecognizer){ print(“image tap”)}此问题尚不清楚。

csga3l58

csga3l581#

你的问题对我来说有点难注意到。但是我相信你在接收触摸事件方面有问题,如果是这样,问题是这样的。
在计算变量之外编写触摸事件。

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。

but5z9lq

but5z9lq2#

这不是关于你的图像的大小,你正在实现导航控制器的方式是不好的.它似乎你正在定位你的图像在navigationController顶栏之下这是隐藏的(我只是突出显示了隐藏的部分)。改变你的图像的位置,你会看到你的点击被运行,或者如果你点击你的图像的一部分,这不是背后的topper,你的触摸再次工作.所以这部分你的图像是位于导航栏后面所以触摸将不再响应它.我看到你的代码导航,这是不适当的.
此外,如果您让rootViewcontroller直接加载HomeViewcontroller,您将看到代码工作正常,因为navigationController不会中断触摸事件。

window.rootViewController =  HomeViewController()

相关问题