72 lines
2.9 KiB
Plaintext
72 lines
2.9 KiB
Plaintext
#import "RNSImageLoadingHelper.h"
|
|
#import "RCTImageSource+AccessHiddenMembers.h"
|
|
|
|
@implementation RNSImageLoadingHelper
|
|
|
|
+ (void)loadImageSyncIfPossibleFromJsonSource:(nonnull NSDictionary *)jsonImageSource
|
|
withImageLoader:(nonnull RCTImageLoader *)imageLoader
|
|
asTemplate:(BOOL)isTemplate
|
|
completionBlock:(void (^_Nonnull)(UIImage *_Nullable image))imageLoadingCompletionBlock
|
|
{
|
|
RCTAssert(RCTIsMainQueue(), @"[RNScreens] Expected to run on main queue");
|
|
|
|
RCTImageSource *imageSource = [RCTConvert RCTImageSource:jsonImageSource];
|
|
RCTAssert(imageSource != nil, @"[RNScreens] Expected nonnil image source");
|
|
|
|
#if !defined(NDEBUG) // We're in debug mode here
|
|
if (imageSource.packagerAsset) {
|
|
// We use `+ [RCTConvert UIImage:]` only in debug mode, because it is deprecated, however
|
|
// we haven't found different way to load image synchronously in debug other than
|
|
// writing the code manually.
|
|
UIImage *image = [RCTConvert UIImage:jsonImageSource];
|
|
imageLoadingCompletionBlock([RNSImageLoadingHelper handleRenderingModeForImage:image isTemplate:isTemplate]);
|
|
} else
|
|
#endif // !defined(NDEBUG)
|
|
{
|
|
[self loadImageFromSource:imageSource
|
|
withImageLoader:imageLoader
|
|
asTemplate:isTemplate
|
|
completionBlock:imageLoadingCompletionBlock];
|
|
}
|
|
}
|
|
|
|
+ (void)loadImageFromSource:(nonnull RCTImageSource *)imageSource
|
|
withImageLoader:(nonnull RCTImageLoader *)imageLoader
|
|
asTemplate:(BOOL)isTemplate
|
|
completionBlock:(void (^_Nonnull)(UIImage *_Nullable image))imageLoadingCompletionBlock
|
|
{
|
|
RCTAssert(imageSource != nil, @"[RNScreens] imageSource must not be nil");
|
|
RCTAssert(imageLoader != nil, @"[RNScreens] imageLoader must not be nil");
|
|
|
|
[imageLoader loadImageWithURLRequest:imageSource.request
|
|
size:imageSource.size
|
|
scale:imageSource.scale
|
|
clipped:true
|
|
resizeMode:RCTResizeModeCenter
|
|
progressBlock:^(int64_t progress, int64_t total) {
|
|
}
|
|
partialLoadBlock:^(UIImage *_Nonnull image) {
|
|
}
|
|
completionBlock:^(NSError *_Nullable error, UIImage *_Nullable image) {
|
|
if (RCTIsMainQueue()) {
|
|
imageLoadingCompletionBlock([RNSImageLoadingHelper handleRenderingModeForImage:image isTemplate:isTemplate]);
|
|
} else {
|
|
dispatch_async(dispatch_get_main_queue(), ^{
|
|
imageLoadingCompletionBlock([RNSImageLoadingHelper handleRenderingModeForImage:image
|
|
isTemplate:isTemplate]);
|
|
});
|
|
}
|
|
}];
|
|
}
|
|
|
|
+ (nullable UIImage *)handleRenderingModeForImage:(nullable UIImage *)image isTemplate:(BOOL)isTemplate
|
|
{
|
|
if (isTemplate) {
|
|
return [image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
|
|
} else {
|
|
return [image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
|
|
}
|
|
}
|
|
|
|
@end
|