忽略UICollectionView的空白区域中的触摸/手势

时间:2017-03-05 00:39:41

标签: ios swift uicollectionview

我在UICollectionsView下面有一个地图视图(谷歌地图而不是MapKit),并希望允许平移/缩放地图,但由于UICollectionView设置为占据整个屏幕,它拦截所有触摸事件,使地图静止。

作为一些参考,这是我目前所拥有的以及我将UICollectionView设置为全屏的原因,因此我可以在所有屏幕空间内单独设置单元格的位置。

enter image description here

我尝试在Swift中重写this answer,但它正在抛出nil when unwrapping

override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {
    let indexPath: IndexPath? = self.indexPathForItem(at: point)
    let cell: UICollectionViewCell? = (self.cellForItem(at: indexPath!))
    if (cell != nil) && convert(point, to: cell?.contentView).x >= 0 {
        return true
    }
    return false
}

1 个答案:

答案 0 :(得分:2)

想出来。我没有检测触摸事件是否发生在单元格中,而是检查事件是否发生在某个y点之后并相应地处理。

override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {
    if point.y > cardContainerY {
        return true
    }
    return false
}

其中cardContainerYCGFloat,它是根据当前关注的卡片计算的(因为卡片可以展开,在y空间内移动)。