Ios Swift-将触控添加到UIImageView

Ios Swift-将触控添加到UIImageView,ios,swift,xcode,uibutton,navigationbar,Ios,Swift,Xcode,Uibutton,Navigationbar,我正在在线学习一个教程,我正在尝试将触摸检测添加到UIImageView。我意识到这可以用手势识别器来完成,但我有一个不同的问题,我不知道如何要求它 基本上,我添加了一个从imageView框架初始化的覆盖ui按钮。但是,由于导航栏的原因,我不得不将帧向下移动64像素。My imageView是从情节提要中添加的,但是ui按钮是以编程方式添加的 有没有一种不用手动添加64像素的方法?这没什么大不了的,但由于打印时图像视图的框架是(10,10,355,450),而UIButton的框架是(10,7

我正在在线学习一个教程,我正在尝试将触摸检测添加到
UIImageView
。我意识到这可以用手势识别器来完成,但我有一个不同的问题,我不知道如何要求它

基本上,我添加了一个从imageView框架初始化的覆盖
ui按钮。但是,由于导航栏的原因,我不得不将帧向下移动64像素。My imageView是从情节提要中添加的,但是
ui按钮是以编程方式添加的

有没有一种不用手动添加64像素的方法?这没什么大不了的,但由于打印时图像视图的框架是
(10,10,355,450)
,而
UIButton
的框架是
(10,74,355,450)
,这让我有点恼火

让我澄清一下,我想知道为什么视图控制器在以编程方式添加子视图时不考虑导航栏的大小?从情节提要添加子视图时,似乎可以很好地处理这个问题

:


UIViewController
的导航栏设置为
不透明导航栏
。它将启动导航栏下方的视图


UIViewController
的导航栏设置为
不透明导航栏
。它将启动导航栏下方的视图


您可以在图像视图上添加按钮

试试这个:

let overlay = UIButton(frame: imageView.bounds)
        imageView.isUserInteractionEnabled = true
        overlay.backgroundColor = UIColor.red.withAlphaComponent(0.3)
        overlay.addTarget(self, action: #selector(imageViewTapped), for: .touchUpInside)
        imageView.addSubview(overlay)

您可以在图像视图上添加按钮

试试这个:

let overlay = UIButton(frame: imageView.bounds)
        imageView.isUserInteractionEnabled = true
        overlay.backgroundColor = UIColor.red.withAlphaComponent(0.3)
        overlay.addTarget(self, action: #selector(imageViewTapped), for: .touchUpInside)
        imageView.addSubview(overlay)

您可以使用
uitappesturerecognizer
进行以下相同的操作

    let bg = UIImageView(image: UIImage(named: "Home"))
    bg.frame = self.view.frame
    self.view.addSubview(bg)

    let tapRecognizer = UITapGestureRecognizer(target: self, action: #selector(SecondViewController.onTapScreen))
    bg.isUserInteractionEnabled = true
    bg.addGestureRecognizer(tapRecognizer)
处理点击事件,如下所示

    func onTapScreen() {
         // Handle touch here.
    }

通过这种方式,您不需要同时使用按钮,这样就可以避免多个控件。

您可以使用
UITapgestureRecognitizer
,如下所示

    let bg = UIImageView(image: UIImage(named: "Home"))
    bg.frame = self.view.frame
    self.view.addSubview(bg)

    let tapRecognizer = UITapGestureRecognizer(target: self, action: #selector(SecondViewController.onTapScreen))
    bg.isUserInteractionEnabled = true
    bg.addGestureRecognizer(tapRecognizer)
处理点击事件,如下所示

    func onTapScreen() {
         // Handle touch here.
    }

通过这种方式,您不需要同时使用按钮,这样就可以避免多个控件。

能否显示UIViewController的属性捕获?很抱歉,我现在不能添加超过2个链接,但所有内容都设置为默认设置,大小:推断,状态栏:推断,顶部栏:推断,底部栏:推断。您可以使用答案中给出的self.view.frame。请检查答案。如果imageView显示正确,请尝试将覆盖添加为imageView的子视图,而不是self.view。我应该提到,imageView是从嵌入导航控制器的情节提要中添加的。但是,我想添加一个UIButton实例以覆盖到imageview,但我必须添加64px手动。您能显示UIViewController的属性吗?很抱歉,我现在不能添加超过2个链接,但所有内容都设置为默认设置,大小:推断,状态栏:推断,顶部栏:推断,底部栏:推断。您可以使用答案中给出的self.view.frame。请检查答案。如果imageView显示正确,请尝试将覆盖添加为imageView的子视图,而不是self.view。我应该提到,imageView是从嵌入导航控制器的情节提要中添加的。但是,我想添加一个UIButton实例以覆盖到imageview,但我必须手动添加64px