滚动视图与集合视图。获得 "visible image"

Scrollview vs Collectionview. Get "visible image"

我想要实现的目标: 我有一组图像,我想水平 swipe/scroll 通过。这些图像代表联系人。当我找到我想要的联系人(图像)时,我按下一个单独的开始呼叫按钮。此按钮转至 Phone 视图控制器。我需要在那个 Phone 视图控制器上显示我正在呼叫的人的图像。为此,我需要知道在启动 segue 之前我在哪个联系人图像上。

My contacts view controller. Currently showing my scrollview attempt

我目前拥有的:我已经设置了一个滚动视图和一个单独的集合视图(它们之间没有任何联系。我有两个因为我正在尝试弄清楚哪个能让我得到我需要的东西)。两者都功能齐全,可以让我翻阅阵列中的图像。 当我按下将启动到下一个视图控制器的 segue 的按钮时,我无法弄清楚如何务实地获取正在显示的图像。

我最初是想给图像打标签,然后检索标签并通过 segue 将其传递给下一个视图控制器。 然后我尝试获取图像的索引 "currently visible" 并通过 segue 传递它。

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "ImageCollectionViewCell", for: indexPath) as! ImageCollectionViewCell

    cell.imgImage.image = imageArray[indexPath.row]

    //Get character for segue
    selectedCharacter = indexPath.row

    return cell
}

我还尝试获取图像名称并通过 segue 传递它。

func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "ImageCollectionViewCell", for: indexPath) as! ImageCollectionViewCell
    switch cell.imgImage.image{
        case UIImage(named: "Van"):
            selectedCharacter = 2
        case UIImage(named: "Fel"):
            selectedCharacter = 3
        default:
            selectedCharacter = 1
    }
}

我还没有想出任何方法来使用滚动视图获取信息。 滚动视图 viewDidLoad 代码:

@IBOutlet var scrollView: UIScrollView!


for i in 0..<images.count {
        let imageView = UIImageView()
        let x = self.view.frame.size.width * CGFloat(i)
        imageView.frame = CGRect(x: x, y: 0, width: 343, height: 244)
        imageView.contentMode = .scaleAspectFit
        imageView.image = images[i]
        imageView.tag = i

        scrollView.contentSize.width = scrollView.frame.size.width * CGFloat(i + 1)
        scrollView.addSubview(imageView)
    }

问题:有没有人知道我如何找到我要呼叫的联系人以及我应该使用滚动视图还是集合视图?

谢谢!

您可以使用集合视图。创建一个具有 image 属性 的自定义单元格 class。当你即将return单元格中的cellForItem函数时,你可以设置image属性。

let cell = collectionView.dequeueReusableCellWithIdentifier("Your Cell's identifier", forIndexPath: indexPath)
cell.image = imageArray[indexPath.item]

然后您可以覆盖 didSelectItem,并访问传入的 indexPath 单元格的 image 属性,如下所示:

let cell = collectionView!.cellForItemAtIndexPath(indexPath)
let image = cell.image
// do whatever you need with the image.

我不知道你点击了哪里,但你可以用这个获取当前视图索引: 让索引 = scrollView.contentOffset.x / scrollView.bounds.size.width collectionView 或 scrollview 相同