diff --git a/ios/Elements/RNSVGGroup.m b/ios/Elements/RNSVGGroup.m index b9c3ed10..803a209a 100644 --- a/ios/Elements/RNSVGGroup.m +++ b/ios/Elements/RNSVGGroup.m @@ -173,20 +173,26 @@ } } - for (RNSVGNode *node in [self.subviews reverseObjectEnumerator]) { - if (![node isKindOfClass:[RNSVGNode class]] || [node isKindOfClass:[RNSVGMask class]]) { - continue; - } - - if (event) { - node.active = NO; - } - - UIView *hitChild = [node hitTest:transformed withEvent:event]; - - if (hitChild) { - node.active = YES; - return (node.responsible || (node != hitChild)) ? hitChild : self; + for (UIView *node in [self.subviews reverseObjectEnumerator]) { + if ([node isKindOfClass:[RNSVGNode class]]) { + if ([node isKindOfClass:[RNSVGMask class]]) { + continue; + } + RNSVGNode* svgNode = (RNSVGNode*)node; + if (event) { + svgNode.active = NO; + } + UIView *hitChild = [svgNode hitTest:transformed withEvent:event]; + if (hitChild) { + svgNode.active = YES; + return (svgNode.responsible || (svgNode != hitChild)) ? hitChild : self; + } + } else if ([node isKindOfClass:[RNSVGSvgView class]]) { + RNSVGSvgView* svgView = (RNSVGSvgView*)node; + UIView *hitChild = [svgView hitTest:transformed withEvent:event]; + if (hitChild) { + return hitChild; + } } } diff --git a/ios/Elements/RNSVGSvgView.m b/ios/Elements/RNSVGSvgView.m index edd27640..8b71ba30 100644 --- a/ios/Elements/RNSVGSvgView.m +++ b/ios/Elements/RNSVGSvgView.m @@ -66,6 +66,16 @@ - (void)invalidate { + UIView* parent = self.superview; + if ([parent isKindOfClass:[RNSVGNode class]]) { + if (!rendered) { + return; + } + RNSVGNode* svgNode = (RNSVGNode*)parent; + [svgNode invalidate]; + rendered = false; + return; + } [self setNeedsDisplay]; } @@ -158,7 +168,7 @@ } - (void)drawToContext:(CGContextRef)context withRect:(CGRect)rect { - + rendered = true; self.initialCTM = CGContextGetCTM(context); self.invInitialCTM = CGAffineTransformInvert(self.initialCTM); if (self.align) {