From 7e5fe7e26cc12e42e54bf3551782115d8a641d38 Mon Sep 17 00:00:00 2001 From: wwwcg Date: Fri, 11 Nov 2022 21:58:34 +0800 Subject: [PATCH] fix(ios): correct hittest when view has animation --- ios/sdk/component/view/HippyView.m | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/ios/sdk/component/view/HippyView.m b/ios/sdk/component/view/HippyView.m index e8695e6bd..d279e0628 100644 --- a/ios/sdk/component/view/HippyView.m +++ b/ios/sdk/component/view/HippyView.m @@ -222,7 +222,16 @@ HIPPY_NOT_IMPLEMENTED(-(instancetype)initWithCoder : unused) // `hitSubview` is the topmost subview which was hit. The hit point can // be outside the bounds of `view` (e.g., if -clipsToBounds is NO). UIView *hitSubview = nil; - BOOL isPointInside = [self pointInside:point withEvent:event]; + BOOL isPointInside = NO; + // use presentationLayer to adapt the view with animation + CALayer *presentationLayer = self.layer.presentationLayer; + if (presentationLayer) { + CGPoint layerPoint = [presentationLayer convertPoint:point fromLayer:self.layer]; + if ([presentationLayer containsPoint:layerPoint]) { + isPointInside = YES; + } + } + BOOL needsHitSubview = !(_pointerEvents == HippyPointerEventsNone || _pointerEvents == HippyPointerEventsBoxOnly); if (needsHitSubview && (![self clipsToBounds] || isPointInside)) { // The default behaviour of UIKit is that if a view does not contain a point,