Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/115.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 确定表格视图单元格中的图像是否完全可见_Ios_Swift_Xcode_Uitableview_Swift5 - Fatal编程技术网

Ios 确定表格视图单元格中的图像是否完全可见

Ios 确定表格视图单元格中的图像是否完全可见,ios,swift,xcode,uitableview,swift5,Ios,Swift,Xcode,Uitableview,Swift5,我有一个表视图,其中每个表视图单元格都有一个图像 我需要确定图像视图何时在滚动条上完全可见。另外,如果两个单独的表视图单元格中的两个图像同时完全可见,我只想触发第一个图像的操作 我曾想过使用,但我发现它只会触发一次,并且在细胞进入视野时就会触发 我也发现了,但这是为了确定表视图单元格本身是否完全可见,而不是表视图单元格中的视图 我有什么选择?解决这个问题的最佳方法是什么?假设您已经设置了管理图像单元格的视图控制器,下面是该控制器的部分代码,它是UITableView的代表,演示了如何跟踪图像变为

我有一个表视图,其中每个表视图单元格都有一个图像

我需要确定图像视图何时在滚动条上完全可见。另外,如果两个单独的表视图单元格中的两个图像同时完全可见,我只想触发第一个图像的操作

我曾想过使用,但我发现它只会触发一次,并且在细胞进入视野时就会触发

我也发现了,但这是为了确定表视图单元格本身是否完全可见,而不是表视图单元格中的视图


我有什么选择?解决这个问题的最佳方法是什么?

假设您已经设置了管理图像单元格的视图控制器,下面是该控制器的部分代码,它是
UITableView
的代表,演示了如何跟踪图像变为可见的方法。希望这会有帮助

@IBOutlet weak var tableView: UITableView!

override func viewDidAppear(_ animated: Bool) {
    self.verifyImagesVisibility()
}

func scrollViewDidScroll(_ scrollView: UIScrollView)  {
    self.verifyImagesVisibility()
}

private func verifyImagesVisibility() {
    for cell in self.tableView.visibleCells {
        if let imageView = cell.imageView {
            let visibleRect = self.tableView.bounds
            let imageRect = imageView.convert(imageView.bounds, to: tableView)

            imageView.layer.borderWidth = 4.0 // for test
            if visibleRect.contains(imageRect) {
                // do anything here for image completely shown
                imageView.layer.borderColor = UIColor.red.cgColor // for test
            } else {
                // do anything here for image become partially hidden
                imageView.layer.borderColor = UIColor.black.cgColor // for test
            }
        }
    }
}

您可以使用user let cells=tableView.visiblecells将自己设置为滚动视图代理,并在滚动发生时检查情况。@matt我不太清楚您的意思。我刚刚发现了
ScrollViewDiEndDraging
ScrollViewDiEndDraging
,因此我现在知道何时触发计算,但我仍然不确定如何计算图像是否可见。您知道所有单元格的帧和表视图的边界偏移量。因此,很容易知道什么是完全可见的。我认为您必须在图像视图上异步设置图像,在完成块中,您必须向主视图发送通知,并为特定单元格维护布尔值。