44
55#import < objc/runtime.h>
66
7- #import < React/RCTBridge.h>
8-
97IMP RTASwizzleSelector (Class class, SEL originalSelector, SEL swizzledSelector)
108{
119 Method originalMethod = class_getInstanceMethod (class, originalSelector);
@@ -27,70 +25,6 @@ IMP RTASwizzleSelector(Class class, SEL originalSelector, SEL swizzledSelector)
2725 return originalImpl;
2826}
2927
30- // MARK: - [0.63.2] Images do not render on iOS 14
31- // See https://github.com/facebook/react-native/pull/29420
32-
33- #if !TARGET_OS_OSX && REACT_NATIVE_VERSION < 6302
34-
35- #pragma clang diagnostic push
36- #pragma clang diagnostic ignored "-Wnullability-completeness"
37- #import < React/RCTUIImageViewAnimated.h>
38- #pragma clang diagnostic pop
39-
40- @implementation RCTUIImageViewAnimated (ReactTestApp)
41-
42- static void (*orig_displayLayer)(id , SEL , CALayer *);
43-
44- + (void )initialize
45- {
46- if ([self class ] != [RCTUIImageViewAnimated class ]) {
47- return ;
48- }
49-
50- if (@available (iOS 14.0 , *)) {
51- static dispatch_once_t onceToken;
52- dispatch_once (&onceToken, ^{
53- IMP impl = RTASwizzleSelector (
54- [self class ], @selector (displayLayer: ), @selector (rta_displayLayer: ));
55- orig_displayLayer = (void (*)(id , SEL , CALayer *))impl;
56- });
57- }
58- }
59-
60- - (void )rta_displayLayer : (CALayer *)layer
61- {
62- /* The fix for images not rendering is to let UIImageView handle it when we
63- * are not animating. The following change was made in react-native#29420:
64- *
65- * diff --git a/Libraries/Image/RCTUIImageViewAnimated.m b/Libraries/Image/RCTUIImageViewAnimated.m
66- * index 93c6a2f02f5..f6fb5bc60cc 100644
67- * --- a/Libraries/Image/RCTUIImageViewAnimated.m
68- * +++ b/Libraries/Image/RCTUIImageViewAnimated.m
69- * @@ -285,6 +285,8 @@ static NSUInteger RCTDeviceFreeMemory() {
70- * if (_currentFrame) {
71- * layer.contentsScale = self.animatedImageScale;
72- * layer.contents = (__bridge id)_currentFrame.CGImage;
73- * + } else {
74- * + [super displayLayer:layer];
75- * }
76- * }
77- *
78- * The patch calls `super` when `_currentFrame` is `nil`. For our monkey
79- * patch, we'll invert the logic to let the original method handle the case
80- * where `_currentFrame` is missing.
81- */
82- if ([self respondsToSelector: @selector (currentFrame )] &&
83- [self performSelector: @selector (currentFrame )] == nil ) {
84- [super displayLayer: layer];
85- } else {
86- orig_displayLayer (self, @selector (displayLayer: ), layer);
87- }
88- }
89-
90- @end
91-
92- #endif // !TARGET_OS_OSX && REACT_NATIVE_VERSION < 6302
93-
9428// MARK: - [0.70.0] Alerts don't show when using UIScene
9529// See https://github.com/facebook/react-native/pull/34562
9630
0 commit comments