Тест на удар повернутый вид - PullRequest
0 голосов
/ 03 октября 2018

Мне нужно написать function, который вернет true, если задано point внутри любого из subviews hierarchy из view A.A может быть transformed (повернуто), а clipToBounds отключено.В его подпредставлениях также может быть отключен clipToBounds, и true должен быть возвращен, если какой-либо из subviews был нажат.У меня есть кое-что, что почти работает, но терпит неудачу, когда представление поворачивается.Может кто-нибудь подсказать как это исправить?

extension UIView {

    func hitTestIgnoringBounds(_ point: CGPoint) -> Bool {

        guard !isHidden && alpha > 0 else { return false }

        let subPoint = frame.origin - point
        return frame.contains(point) || subviews.contains {
            return $0.hitTestIgnoringBounds(subPoint)
        }

    }

}

1 Ответ

0 голосов
/ 03 октября 2018

Я знал, что это должно быть легко, но не мог заставить это работать.Я сделал глупую ошибку - мой код добавлял подслоя вместо подпредставлений.Когда я переключился на подпредставления, все работало нормально:

func viewOrSubviewsContaintPoint(_ point: CGPoint) -> Bool {
    let convertedPoint = convert(point, from: superview)
    let containsPoint = bounds.contains(convertedPoint)

    var subviewsContainsPoint: Bool {
        return subviews.contains { $0.viewOrSubviewsContaintPoint(convertedPoint) }
    }

    return containsPoint || subviewsContainsPoint
}
...