mirror of
https://github.com/zoriya/react-native-svg.git
synced 2025-12-05 22:56:11 +00:00
fix: resolve transforms on new architecture (#2542)
# Summary Add `resolveTransforms` on `updateProps` to get correct matrix. It will improve animating transformations, as Animated/Reanimated skips JS `processTransform` and passes transformations directly. ## Test Plan Animate `transform` prop in react-native style. ## Compatibility | OS | Implemented | | ------- | :---------: | | iOS | ✅ | | MacOS | ✅ |
This commit is contained in:
@@ -248,6 +248,16 @@ CGFloat const RNSVG_DEFAULT_FONT_SIZE = 12;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)setTransforms:(CGAffineTransform)transforms
|
||||||
|
{
|
||||||
|
if (CGAffineTransformEqualToTransform(transforms, _transforms)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_transforms = transforms;
|
||||||
|
[self invalidate];
|
||||||
|
}
|
||||||
|
|
||||||
- (void)setClientRect:(CGRect)clientRect
|
- (void)setClientRect:(CGRect)clientRect
|
||||||
{
|
{
|
||||||
if (CGRectEqualToRect(_clientRect, clientRect)) {
|
if (CGRectEqualToRect(_clientRect, clientRect)) {
|
||||||
|
|||||||
@@ -55,6 +55,8 @@ static id RNSVGConvertFollyDynamicToId(const folly::dynamic &dyn)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const facebook::react::LayoutMetrics MinimalLayoutMetrics = {{{0, 0}, {1, 1}}};
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
void setCommonNodeProps(const T &nodeProps, RNSVGNode *node)
|
void setCommonNodeProps(const T &nodeProps, RNSVGNode *node)
|
||||||
{
|
{
|
||||||
@@ -69,7 +71,8 @@ void setCommonNodeProps(const T &nodeProps, RNSVGNode *node)
|
|||||||
nodeProps.matrix.at(4),
|
nodeProps.matrix.at(4),
|
||||||
nodeProps.matrix.at(5));
|
nodeProps.matrix.at(5));
|
||||||
}
|
}
|
||||||
CATransform3D transform3d = RCTCATransform3DFromTransformMatrix(nodeProps.transform);
|
auto newTransform = nodeProps.resolveTransform(MinimalLayoutMetrics);
|
||||||
|
CATransform3D transform3d = RCTCATransform3DFromTransformMatrix(newTransform);
|
||||||
CGAffineTransform transform = CATransform3DGetAffineTransform(transform3d);
|
CGAffineTransform transform = CATransform3DGetAffineTransform(transform3d);
|
||||||
node.invTransform = CGAffineTransformInvert(transform);
|
node.invTransform = CGAffineTransformInvert(transform);
|
||||||
node.transforms = transform;
|
node.transforms = transform;
|
||||||
|
|||||||
@@ -34,7 +34,6 @@ RCT_CUSTOM_VIEW_PROPERTY(transform, CATransform3D, RNSVGNode)
|
|||||||
CGAffineTransform transform = CATransform3DGetAffineTransform(transform3d);
|
CGAffineTransform transform = CATransform3DGetAffineTransform(transform3d);
|
||||||
view.invTransform = CGAffineTransformInvert(transform);
|
view.invTransform = CGAffineTransformInvert(transform);
|
||||||
view.transforms = transform;
|
view.transforms = transform;
|
||||||
[view invalidate];
|
|
||||||
}
|
}
|
||||||
RCT_EXPORT_VIEW_PROPERTY(mask, NSString)
|
RCT_EXPORT_VIEW_PROPERTY(mask, NSString)
|
||||||
RCT_EXPORT_VIEW_PROPERTY(markerStart, NSString)
|
RCT_EXPORT_VIEW_PROPERTY(markerStart, NSString)
|
||||||
|
|||||||
Reference in New Issue
Block a user