Как показано на следующем изображении, у меня есть collectionView с maskView над ним. И вид справа над maskView.
Как реализовать проникновение в событие просмотра маски?
Идея моего PM заключается в том, что collectionViewCell можно щелкнуть, когда представление маски над collectionView. (немного странно)
Представление маски приняло на себя событие collectionView.
Я думаю, что я должен переопределить цепочку респондентов событий.
Я пытался справиться с override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView?
class Mask: UIView {
// ...
override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
guard let views = superview?.subviews else {
return self
}
for view in views{
if type(of: view) == UICollectionView.self{
return view
}
}
return self
}
}
Не работает по команде, collectionView просто прокручивается.
Как это решить?
Я немного улучшил код.
override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
guard let views = superview?.subviews else {
return self
}
for view in views{
if type(of: view) == UICollectionView.self{
let collectionView = view as! UICollectionView
for cell in collectionView.visibleCells{
if cell.frame.contains(point){
return cell
}
}
}
}
return self
}
Это не очень остро. Некоторые события отбрасываются при переключении ячеек, на которые нажимают. Точно так же, как Apple сделала кеширование событий hitTest.