iOS: как реализовать проникновение в событие просмотра маски?

Как показано на следующем изображении, у меня есть 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.


person dengST30    schedule 27.08.2019    source источник


Ответы (1)


Если я правильно понял, и представление маски находится поверх collectionView и получает события, вы можете просто установить для представления маски userInteractionEnabled значение false.

Таким образом, событие будет отправлено на уровень ниже, пока его кто-нибудь не обработает.

person User123335511231    schedule 27.08.2019