mirror of
https://github.com/status-im/react-native.git
synced 2025-02-04 21:53:30 +00:00
Added support for local image to RCTImageLoader
This commit is contained in:
parent
792b2db23c
commit
5e160f168d
@ -15,6 +15,7 @@
|
|||||||
@interface RCTImageLoader : NSObject
|
@interface RCTImageLoader : NSObject
|
||||||
|
|
||||||
+ (ALAssetsLibrary *)assetsLibrary;
|
+ (ALAssetsLibrary *)assetsLibrary;
|
||||||
+ (void)loadImageWithTag:(NSString *)tag callback:(void (^)(NSError *error, UIImage *image))callback;
|
+ (void)loadImageWithTag:(NSString *)tag
|
||||||
|
callback:(void (^)(NSError *error, id /* UIImage or CAAnimation */ image))callback;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
#import <UIKit/UIKit.h>
|
#import <UIKit/UIKit.h>
|
||||||
|
|
||||||
#import "RCTConvert.h"
|
#import "RCTConvert.h"
|
||||||
|
#import "RCTGIFImage.h"
|
||||||
#import "RCTImageDownloader.h"
|
#import "RCTImageDownloader.h"
|
||||||
#import "RCTLog.h"
|
#import "RCTLog.h"
|
||||||
|
|
||||||
@ -51,7 +52,7 @@ NSError *errorWithMessage(NSString *message)
|
|||||||
return assetsLibrary;
|
return assetsLibrary;
|
||||||
}
|
}
|
||||||
|
|
||||||
+ (void)loadImageWithTag:(NSString *)imageTag callback:(void (^)(NSError *error, UIImage *image))callback
|
+ (void)loadImageWithTag:(NSString *)imageTag callback:(void (^)(NSError *error, id image))callback
|
||||||
{
|
{
|
||||||
if ([imageTag hasPrefix:@"assets-library"]) {
|
if ([imageTag hasPrefix:@"assets-library"]) {
|
||||||
[[RCTImageLoader assetsLibrary] assetForURL:[NSURL URLWithString:imageTag] resultBlock:^(ALAsset *asset) {
|
[[RCTImageLoader assetsLibrary] assetForURL:[NSURL URLWithString:imageTag] resultBlock:^(ALAsset *asset) {
|
||||||
@ -119,11 +120,25 @@ NSError *errorWithMessage(NSString *message)
|
|||||||
callback(nil, [UIImage imageWithData:data]);
|
callback(nil, [UIImage imageWithData:data]);
|
||||||
}
|
}
|
||||||
}];
|
}];
|
||||||
|
} else if ([[imageTag pathExtension] caseInsensitiveCompare:@"gif"] == NSOrderedSame) {
|
||||||
|
id image = RCTGIFImageWithFileURL([RCTConvert NSURL:imageTag]);
|
||||||
|
if (image) {
|
||||||
|
callback(nil, image);
|
||||||
|
} else {
|
||||||
|
NSString *errorMessage = [NSString stringWithFormat:@"Unable to load GIF image: %@", imageTag];
|
||||||
|
NSError *error = errorWithMessage(errorMessage);
|
||||||
|
callback(error, nil);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
UIImage *image = [RCTConvert UIImage:imageTag];
|
||||||
|
if (image) {
|
||||||
|
callback(nil, image);
|
||||||
} else {
|
} else {
|
||||||
NSString *errorMessage = [NSString stringWithFormat:@"Unrecognized tag protocol: %@", imageTag];
|
NSString *errorMessage = [NSString stringWithFormat:@"Unrecognized tag protocol: %@", imageTag];
|
||||||
NSError *error = errorWithMessage(errorMessage);
|
NSError *error = errorWithMessage(errorMessage);
|
||||||
callback(error, nil);
|
callback(error, nil);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
@ -33,9 +33,11 @@ RCT_CUSTOM_VIEW_PROPERTY(src, NSURL, RCTStaticImage)
|
|||||||
if ([[[json description] pathExtension] caseInsensitiveCompare:@"gif"] == NSOrderedSame) {
|
if ([[[json description] pathExtension] caseInsensitiveCompare:@"gif"] == NSOrderedSame) {
|
||||||
[view.layer addAnimation:RCTGIFImageWithFileURL([RCTConvert NSURL:json]) forKey:@"contents"];
|
[view.layer addAnimation:RCTGIFImageWithFileURL([RCTConvert NSURL:json]) forKey:@"contents"];
|
||||||
} else {
|
} else {
|
||||||
|
[view.layer removeAnimationForKey:@"contents"];
|
||||||
view.image = [RCTConvert UIImage:json];
|
view.image = [RCTConvert UIImage:json];
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
[view.layer removeAnimationForKey:@"contents"];
|
||||||
view.image = defaultView.image;
|
view.image = defaultView.image;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -52,13 +54,19 @@ RCT_CUSTOM_VIEW_PROPERTY(tintColor, UIColor, RCTStaticImage)
|
|||||||
RCT_CUSTOM_VIEW_PROPERTY(imageTag, NSString, RCTStaticImage)
|
RCT_CUSTOM_VIEW_PROPERTY(imageTag, NSString, RCTStaticImage)
|
||||||
{
|
{
|
||||||
if (json) {
|
if (json) {
|
||||||
[RCTImageLoader loadImageWithTag:[RCTConvert NSString:json] callback:^(NSError *error, UIImage *image) {
|
[RCTImageLoader loadImageWithTag:[RCTConvert NSString:json] callback:^(NSError *error, id image) {
|
||||||
if (error) {
|
if (error) {
|
||||||
RCTLogWarn(@"%@", error.localizedDescription);
|
RCTLogWarn(@"%@", error.localizedDescription);
|
||||||
}
|
}
|
||||||
|
if ([image isKindOfClass:[CAAnimation class]]) {
|
||||||
|
[view.layer addAnimation:image forKey:@"contents"];
|
||||||
|
} else {
|
||||||
|
[view.layer removeAnimationForKey:@"contents"];
|
||||||
view.image = image;
|
view.image = image;
|
||||||
|
}
|
||||||
}];
|
}];
|
||||||
} else {
|
} else {
|
||||||
|
[view.layer removeAnimationForKey:@"contents"];
|
||||||
view.image = defaultView.image;
|
view.image = defaultView.image;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user