mirror of
https://github.com/zoriya/react-native-svg.git
synced 2026-06-06 00:12:21 +00:00
[ios] fix hit testing of nested svg and invalidation on changes.
This commit is contained in:
+20
-14
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user