From 4c78a91f7a5bd5f3d0f6fec1d9472a3c765bd393 Mon Sep 17 00:00:00 2001 From: pengfeizhou Date: Fri, 29 Jan 2021 10:27:28 +0800 Subject: [PATCH] iOS:update SDWebImage API call --- doric-demo/src/ImageDemo.ts | 156 +++++++++++++++++- doric-iOS/Example/Example/AppDelegate.m | 3 + doric-iOS/Pod/Classes/Shader/DoricImageNode.m | 95 ++++++----- 3 files changed, 211 insertions(+), 43 deletions(-) diff --git a/doric-demo/src/ImageDemo.ts b/doric-demo/src/ImageDemo.ts index 0608babe..6d91db3c 100644 --- a/doric-demo/src/ImageDemo.ts +++ b/doric-demo/src/ImageDemo.ts @@ -23,12 +23,166 @@ class ImageDemo extends Panel { textAlignment: gravity().center(), height: 50, }), + + label('Button'), + image({ + imageBase64: button, + scaleType: ScaleType.ScaleToFill, + layoutConfig: { + widthSpec: LayoutSpec.FIT, + heightSpec: LayoutSpec.FIT, + }, + imageScale: 2, + }), + image({ + imageBase64: button, + scaleType: ScaleType.ScaleToFill, + layoutConfig: { + widthSpec: LayoutSpec.FIT, + heightSpec: LayoutSpec.FIT, + }, + }), + image({ + imageBase64: button, + scaleType: ScaleType.ScaleToFill, + layoutConfig: { + widthSpec: LayoutSpec.JUST, + heightSpec: LayoutSpec.JUST, + }, + width: 200, + height: 150 / 2.75, + stretchInset: { + left: 100, + top: 0, + right: 100, + bottom: 0 + }, + imageScale: 2.75, + }), + image({ + imageBase64: button, + scaleType: ScaleType.ScaleToFill, + layoutConfig: { + widthSpec: LayoutSpec.JUST, + heightSpec: LayoutSpec.JUST, + }, + width: 200, + height: 75, + stretchInset: { + left: 100, + top: 0, + right: 100, + bottom: 0 + }, + imageScale: 2, + }), + label('Gif'), + image({ + imageUrl: "https://misc.aotu.io/ONE-SUNDAY/world-cup_2014_42.gif", + scaleType: ScaleType.ScaleToFill, + loadCallback: function (ret) { + log('this') + log('loadCallback', ret) + }, + imageScale: 2, + }), + label('APNG'), + image({ + imageUrl: "https://misc.aotu.io/ONE-SUNDAY/world_cup_2014_42.png", + loadCallback: (ret) => { + } + }), label('Animated WebP'), image({ imageUrl: "https://p.upyun.com/demo/webp/webp/animated-gif-0.webp", loadCallback: (ret) => { } }), + label('WebP'), + imageView = image({ + imageUrl: "https://p.upyun.com/demo/webp/webp/jpg-0.webp", + layoutConfig: layoutConfig().just(), + width: 200, + height: 200, + // loadCallback: (ret) => { + // if (ret) { + // imageView.width = ret.width + // imageView.height = ret.height + // } + // } + }), + label('ScaleToFill'), + image({ + imageUrl, + width: 300, + height: 300, + isBlur: true, + border: { + width: 2, + color: Color.GRAY, + }, + scaleType: ScaleType.ScaleToFill, + layoutConfig: layoutConfig().just(), + loadCallback: (ret) => { + } + }), + label('ScaleAspectFit'), + image({ + imageUrl, + width: 300, + height: 300, + border: { + width: 2, + color: Color.GRAY, + }, + scaleType: ScaleType.ScaleAspectFit, + layoutConfig: layoutConfig().just(), + }), + label('ScaleAspectFill'), + image({ + imageUrl, + width: 300, + height: 300, + border: { + width: 2, + color: Color.GRAY, + }, + scaleType: ScaleType.ScaleAspectFill, + layoutConfig: layoutConfig().just(), + }), + label('ImageBase64'), + image({ + imageBase64: img_base64[0], + width: 300, + height: 300, + border: { + width: 2, + color: Color.GRAY, + }, + scaleType: ScaleType.ScaleAspectFill, + layoutConfig: layoutConfig().just(), + }), + label('StretchInset'), + image({ + imageBase64: img_base64[1], + height: 60, + width: 134, + scaleType: ScaleType.ScaleAspectFill, + layoutConfig: layoutConfig().just(), + }), + image({ + imageBase64: img_base64[1], + height: 60, + width: 294, + scaleType: ScaleType.ScaleToFill, + layoutConfig: layoutConfig().just(), + stretchInset: { + left: 0.85, + top: 0, + right: 0.149, + bottom: 0 + } + }), ], { layoutConfig: layoutConfig().most().configHeight(LayoutSpec.FIT), @@ -70,4 +224,4 @@ class ImageDemo extends Panel { onDestroy() { modal(context).toast('onDestroy') } -} \ No newline at end of file +} diff --git a/doric-iOS/Example/Example/AppDelegate.m b/doric-iOS/Example/Example/AppDelegate.m index ca2140a8..23f55ef4 100644 --- a/doric-iOS/Example/Example/AppDelegate.m +++ b/doric-iOS/Example/Example/AppDelegate.m @@ -9,6 +9,8 @@ #import "AppDelegate.h" #import "NavigationController.h" #import "ViewController.h" +#import +#import @interface AppDelegate () @property(nonatomic, strong) UIViewController *rootVC; @@ -28,6 +30,7 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:( self.window.rootViewController = self.navigationController; [self.window addSubview:self.navigationController.view]; [self.window makeKeyAndVisible]; + [SDImageCodersManager.sharedManager addCoder:SDImageWebPCoder.sharedCoder]; return YES; } diff --git a/doric-iOS/Pod/Classes/Shader/DoricImageNode.m b/doric-iOS/Pod/Classes/Shader/DoricImageNode.m index 61fb457c..472f8f28 100644 --- a/doric-iOS/Pod/Classes/Shader/DoricImageNode.m +++ b/doric-iOS/Pod/Classes/Shader/DoricImageNode.m @@ -130,7 +130,10 @@ - (UIImage *)currentPlaceHolderImage { #if __has_include() YYImage *image = [YYImage imageWithData:imageData scale:self.imageScale]; #elif __has_include() - SDAnimatedImage *image = [SDAnimatedImage imageWithData:imageData scale:self.imageScale]; + UIImage *image = [SDAnimatedImage imageWithData:imageData scale:self.imageScale]; + if (!image) { + image = [UIImage imageWithData:imageData scale:self.imageScale]; + } #else UIImage *image = [UIImage imageWithData:imageData scale:self.imageScale]; #endif @@ -169,7 +172,10 @@ - (UIImage *)currentErrorImage { #if __has_include() YYImage *image = [YYImage imageWithData:imageData scale:self.imageScale]; #elif __has_include() - SDAnimatedImage *image = [SDAnimatedImage imageWithData:imageData scale:self.imageScale]; + UIImage *image = [SDAnimatedImage imageWithData:imageData scale:self.imageScale]; + if (!image) { + image = [UIImage imageWithData:imageData scale:self.imageScale]; + } #else UIImage *image = [UIImage imageWithData:imageData scale:self.imageScale]; #endif @@ -232,43 +238,39 @@ - (void)blendView:(UIImageView *)view forPropName:(NSString *)name propValue:(id } }]; #elif __has_include() - [view sd_setImageWithURL:[NSURL URLWithString:prop] placeholderImage:[self currentPlaceHolderImage] completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { - __strong typeof(_self) self = _self; - if (self.placeHolderColor || self.errorColor) { - self.view.contentMode = self.contentMode; - } - view.doricLayout.undefined = NO; - if (error) { - [[self currentErrorImage] also:^(UIImage *it) { - self.view.image = it; - }]; - if (self.loadCallbackId.length > 0) { - [self callJSResponse:self.loadCallbackId, nil]; - } - } else { - if (image.scale != self.imageScale) { - if ([image isKindOfClass:SDAnimatedImage.class]) { - image = [SDAnimatedImage imageWithData:((SDAnimatedImage *) image).animatedImageData scale:self.imageScale]; - } else { - image = [UIImage imageWithCGImage:image.CGImage scale:self.imageScale orientation:image.imageOrientation]; - } - self.view.image = image; - } - if (self.loadCallbackId.length > 0) { - [self callJSResponse:self.loadCallbackId, - @{@"width": @(image.size.width), @"height": @(image.size.height)}, - nil]; - } - if (async) { - DoricSuperNode *node = self.superNode; - while (node.superNode != nil) { - node = node.superNode; - } - [node requestLayout]; - } - } - - }]; + [view sd_setImageWithURL:[NSURL URLWithString:prop] + placeholderImage:[self currentPlaceHolderImage] + options:0 + context:@{SDWebImageContextImageScaleFactor: @(self.imageScale)} + progress:nil + completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { + __strong typeof(_self) self = _self; + if (self.placeHolderColor || self.errorColor) { + self.view.contentMode = self.contentMode; + } + view.doricLayout.undefined = NO; + if (error) { + [[self currentErrorImage] also:^(UIImage *it) { + self.view.image = it; + }]; + if (self.loadCallbackId.length > 0) { + [self callJSResponse:self.loadCallbackId, nil]; + } + } else { + if (self.loadCallbackId.length > 0) { + [self callJSResponse:self.loadCallbackId, + @{@"width": @(image.size.width), @"height": @(image.size.height)}, + nil]; + } + if (async) { + DoricSuperNode *node = self.superNode; + while (node.superNode != nil) { + node = node.superNode; + } + [node requestLayout]; + } + } + }]; #else DoricLog(@"Do not support load image url"); #endif @@ -301,7 +303,10 @@ - (void)blendView:(UIImageView *)view forPropName:(NSString *)name propValue:(id #if __has_include() YYImage *image = [YYImage imageWithData:imageData scale:self.imageScale]; #elif __has_include() - SDAnimatedImage *image = [SDAnimatedImage imageWithData:imageData scale:self.imageScale]; + UIImage *image = [SDAnimatedImage imageWithData:imageData scale:self.imageScale]; + if (!image) { + image = [UIImage imageWithData:imageData scale:self.imageScale]; + } #else UIImage *image = [UIImage imageWithData:imageData scale:self.imageScale]; #endif @@ -340,7 +345,10 @@ - (void)blendView:(UIImageView *)view forPropName:(NSString *)name propValue:(id #if __has_include() YYImage *image = [YYImage imageNamed:prop]; #elif __has_include() - SDAnimatedImage *image = [SDAnimatedImage imageNamed:prop]; + UIImage *image = [SDAnimatedImage imageNamed:prop]; + if (!image) { + image = [UIImage imageNamed:prop]; + } #else UIImage *image = [UIImage imageNamed:prop]; #endif @@ -367,7 +375,10 @@ - (void)blendView:(UIImageView *)view forPropName:(NSString *)name propValue:(id #if __has_include() YYImage *image = [YYImage imageWithData:imgData scale:self.imageScale]; #elif __has_include() - SDAnimatedImage *image = [SDAnimatedImage imageWithData:imgData scale:self.imageScale]; + UIImage *image = [SDAnimatedImage imageWithData:imgData scale:self.imageScale]; + if (!image) { + image = [UIImage imageWithData:imgData scale:self.imageScale]; + } #else UIImage *image = [UIImage imageWithData:imgData scale:self.imageScale]; #endif