add onFinishRendering to ios
This commit is contained in:
@@ -0,0 +1,106 @@
|
|||||||
|
diff --git a/node_modules/expo-image/build/ExpoImage.js b/node_modules/expo-image/build/ExpoImage.js
|
||||||
|
index 030ae22..e2731f3 100644
|
||||||
|
--- a/node_modules/expo-image/build/ExpoImage.js
|
||||||
|
+++ b/node_modules/expo-image/build/ExpoImage.js
|
||||||
|
@@ -67,7 +67,7 @@ class ExpoImage extends React.PureComponent {
|
||||||
|
const borderTopColor = processColor(resolvedStyle.borderTopColor);
|
||||||
|
// @ts-ignore
|
||||||
|
const borderBottomColor = processColor(resolvedStyle.borderBottomColor);
|
||||||
|
- return (<NativeExpoImage {...props} {...resolvedStyle} accessibilityLabel={accessibilityLabel ?? alt} style={resolvedStyle} onLoadStart={this.onLoadStart} onLoad={this.onLoad} onProgress={this.onProgress} onError={this.onError} tintColor={tintColor} borderColor={borderColor} borderLeftColor={borderLeftColor} borderRightColor={borderRightColor} borderTopColor={borderTopColor} borderBottomColor={borderBottomColor} borderStartColor={borderStartColor} borderEndColor={borderEndColor} backgroundColor={backgroundColor} ref={props.nativeViewRef}/>);
|
||||||
|
+ return (<NativeExpoImage {...props} {...resolvedStyle} accessibilityLabel={accessibilityLabel ?? alt} style={resolvedStyle} onLoadStart={this.onLoadStart} onLoad={this.onLoad} onProgress={this.onProgress} onError={this.onError} tintColor={tintColor} borderColor={borderColor} borderLeftColor={borderLeftColor} borderRightColor={borderRightColor} borderTopColor={borderTopColor} borderBottomColor={borderBottomColor} borderStartColor={borderStartColor} borderEndColor={borderEndColor} backgroundColor={backgroundColor} ref={props.nativeViewRef} runOnFinishRendering={() => {}} shouldHandleFinishRendering={typeof props.onFinishRendering === 'function'}/>);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
export { ExpoImageModule };
|
||||||
|
diff --git a/node_modules/expo-image/build/Image.types.d.ts b/node_modules/expo-image/build/Image.types.d.ts
|
||||||
|
index 9b1e856..6aa611b 100644
|
||||||
|
--- a/node_modules/expo-image/build/Image.types.d.ts
|
||||||
|
+++ b/node_modules/expo-image/build/Image.types.d.ts
|
||||||
|
@@ -293,6 +293,8 @@ export interface ImageProps extends ViewProps {
|
||||||
|
* @platform android
|
||||||
|
*/
|
||||||
|
decodeFormat?: ImageDecodeFormat;
|
||||||
|
+
|
||||||
|
+ onFinishRendering?: () => void;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* It narrows down some props to types expected by the native/web side.
|
||||||
|
@@ -306,6 +308,7 @@ export interface ImageNativeProps extends ImageProps {
|
||||||
|
transition?: ImageTransition | null;
|
||||||
|
autoplay?: boolean;
|
||||||
|
nativeViewRef?: React.RefObject<ExpoImage>;
|
||||||
|
+ shouldHandleFinishRendering?: boolean;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* A value that represents the relative position of a single axis.
|
||||||
|
diff --git a/node_modules/expo-image/ios/ImageModule.swift b/node_modules/expo-image/ios/ImageModule.swift
|
||||||
|
index ca6718b..b00e395 100644
|
||||||
|
--- a/node_modules/expo-image/ios/ImageModule.swift
|
||||||
|
+++ b/node_modules/expo-image/ios/ImageModule.swift
|
||||||
|
@@ -22,7 +22,8 @@ public final class ImageModule: Module {
|
||||||
|
"onLoadStart",
|
||||||
|
"onProgress",
|
||||||
|
"onError",
|
||||||
|
- "onLoad"
|
||||||
|
+ "onLoad",
|
||||||
|
+ "onFinishRendering"
|
||||||
|
)
|
||||||
|
|
||||||
|
Prop("source") { (view, sources: [ImageSource]?) in
|
||||||
|
@@ -95,6 +96,10 @@ public final class ImageModule: Module {
|
||||||
|
view.autoplay = autoplay ?? true
|
||||||
|
}
|
||||||
|
|
||||||
|
+ Prop("shouldHandleFinishRendering") { (view, prop: Bool?) in
|
||||||
|
+ view.shouldHandleFinishRendering = prop ?? false
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
AsyncFunction("startAnimating") { (view: ImageView) in
|
||||||
|
view.sdImageView.startAnimating()
|
||||||
|
}
|
||||||
|
diff --git a/node_modules/expo-image/ios/ImageView.swift b/node_modules/expo-image/ios/ImageView.swift
|
||||||
|
index ff37747..6fcdef0 100644
|
||||||
|
--- a/node_modules/expo-image/ios/ImageView.swift
|
||||||
|
+++ b/node_modules/expo-image/ios/ImageView.swift
|
||||||
|
@@ -45,6 +45,8 @@ public final class ImageView: ExpoView {
|
||||||
|
|
||||||
|
var allowDownscaling: Bool = true
|
||||||
|
|
||||||
|
+ var shouldHandleFinishRendering = false
|
||||||
|
+
|
||||||
|
var recyclingKey: String? {
|
||||||
|
didSet {
|
||||||
|
if oldValue != nil && recyclingKey != oldValue {
|
||||||
|
@@ -65,6 +67,8 @@ public final class ImageView: ExpoView {
|
||||||
|
|
||||||
|
let onLoad = EventDispatcher()
|
||||||
|
|
||||||
|
+ let onFinishRendering = EventDispatcher()
|
||||||
|
+
|
||||||
|
// MARK: - View
|
||||||
|
|
||||||
|
public override var bounds: CGRect {
|
||||||
|
@@ -403,6 +407,13 @@ public final class ImageView: ExpoView {
|
||||||
|
private func setImage(_ image: UIImage?, contentFit: ContentFit, isPlaceholder: Bool) {
|
||||||
|
sdImageView.contentMode = contentFit.toContentMode()
|
||||||
|
|
||||||
|
+ if self.shouldHandleFinishRendering {
|
||||||
|
+ CATransaction.begin()
|
||||||
|
+ CATransaction.setCompletionBlock {
|
||||||
|
+ self.onFinishRendering()
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
if isPlaceholder {
|
||||||
|
sdImageView.autoPlayAnimatedImage = true
|
||||||
|
} else {
|
||||||
|
@@ -417,6 +428,10 @@ public final class ImageView: ExpoView {
|
||||||
|
sdImageView.image = image
|
||||||
|
}
|
||||||
|
|
||||||
|
+ if self.shouldHandleFinishRendering {
|
||||||
|
+ CATransaction.commit()
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
#if !os(tvOS)
|
||||||
|
if enableLiveTextInteraction {
|
||||||
|
analyzeImage()
|
||||||
Reference in New Issue
Block a user