swift - 在 UIImageView 背景上检测到触摸

标签 swift xcode uiimageview uiimage

我有一个 UIImageView,它加载几张不同尺寸的不同图片,并用黑色背景填充 UIImageView 的剩余区域。我正在尝试找到一种方法,点击黑色背景上的任意位置(而不是图像上)将隐藏 UIImageView。有办法做到这一点吗?

编辑:

这是屏幕的布局。我正在尝试使其点击黑色区域中的任意位置将隐藏大图像并仅显示背景中的其余内容,如下所示:

大图和黑色背景都在一个 UIImageView 中。我只需要一种方法来检测黑色区域中的点击,然后我可以设置 imageview.hidden = true

最佳答案

这里是一个UIViewController类型的类,它将实现该功能。看起来您正在使用 UICollectionView,但它应该仍然可以工作。

import UIKit

class ViewController: UIViewController {

    let imageView = UIImageView()
    var gesture = UITapGestureRecognizer()

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        gesture = UITapGestureRecognizer(target: imageView, action: #selector(ViewController.gestureActivated))
        gesture.numberOfTapsRequired = 1
        gesture.numberOfTouchesRequired = 1
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func gestureActivated() {
        let tap = gesture.location(in: imageView)

        if let image = imageView.image?.accessibilityFrame {
            if !image.contains(tap) {
                imageView.isHidden = true
            }
        }
    }

}  

viewDidLoad中,我为 ImageView 提供了一个UIGestureRecognizer,当用一根手指点击它一次时就会激活它。点击时,将调用 gestureActivated 函数。

然后使用 ImageView 中的点击位置创建一个常量。

获得点击位置后,我们检查它是否在图像上。如果没有,那么我们隐藏 ImageView 。

关于swift - 在 UIImageView 背景上检测到触摸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38720662/

相关文章:

ios - UITableView 单元格背景颜色在滚动时折叠

ios - 如何将新项目添加到当前正在播放旧项目的 AVQueuePlayer

ios - 使用 @testable 来自 XCTest 的 "Use of unresolved identifier"和 "value of type has no member"

ios - 使用透明的 UIImageView 来裁剪其他 UIImageView

ios - 能够从 Storyboard 和 ViewController 加载 xib

swift - pod 安装后找不到 '.xcworkspace'

iphone - 应用程序在 super dealloc 方法中崩溃

ios - 苹果ios13以下登录

swift - 无法在 2 个 View Controller 之间传递 UIImage(没有 Storyboard)

ios - Collection View 在 cell.viewWithTag(100) 上崩溃