我在UICollectionsView
下面有一个地图视图(谷歌地图而不是MapKit),并希望允许平移/缩放地图,但由于UICollectionView
设置为占据整个屏幕,它拦截所有触摸事件,使地图静止。
作为一些参考,这是我目前所拥有的以及我将UICollectionView
设置为全屏的原因,因此我可以在所有屏幕空间内单独设置单元格的位置。
我尝试在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
}
答案 0 :(得分:2)
想出来。我没有检测触摸事件是否发生在单元格中,而是检查事件是否发生在某个y
点之后并相应地处理。
override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {
if point.y > cardContainerY {
return true
}
return false
}
其中cardContainerY
是CGFloat
,它是根据当前关注的卡片计算的(因为卡片可以展开,在y
空间内移动)。