From 561fa38c72f3136ba214ec9fd5f1afe009c88172 Mon Sep 17 00:00:00 2001 From: luckysmg <2539699336@qq.com> Date: Tue, 31 May 2022 09:18:49 +0800 Subject: [PATCH] =?UTF-8?q?ReadME=E4=B8=AD=E6=B7=BB=E5=8A=A0swift=E7=A4=BA?= =?UTF-8?q?=E4=BE=8B=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 113 +++++++++++++++++ README_CN.md | 115 ++++++++++++++++++ .../PowerImageNetworkImageLoader.swift | 8 -- 3 files changed, 228 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index e810818..0bff4ca 100644 --- a/README.md +++ b/README.md @@ -91,6 +91,13 @@ PowerImage provides basic image types, including network, file, nativeAsset, and [[PowerImageLoader sharedInstance] registerImageLoader:[PowerImageFileImageLoader new] forType:kPowerImageImageTypeFile]; ``` +```swift + PowerImageLoader.sharedInstance().register(PowerImageNetworkImageLoader.init(), forType: kPowerImageImageTypeNetwork) + PowerImageLoader.sharedInstance().register(PowerImageAssetsImageLoader.init(), forType: kPowerImageImageTypeNativeAsset) + PowerImageLoader.sharedInstance().register(PowerImageFlutterAssertImageLoader.init(), forType: kPowerImageImageTypeAsset) + PowerImageLoader.sharedInstance().register(PowerImageFileImageLoader.init(), forType: kPowerImageImageTypeFile) +``` + The loader needs to follow the PowerImageLoaderProtocol protocol: @@ -129,6 +136,38 @@ Network image loader example: } ``` + +```swift + +func handleRequest(_ requestConfig: PowerImageRequestConfig!, completed completedBlock: PowerImageLoaderCompletionBlock!) { + let reqSize:CGSize = requestConfig.originSize + let url = URL(string: requestConfig.srcString()) + SDWebImageManager.shared.loadImage(with: url, progress: nil) { image, data, error, cacheType, finished, url in + + if let image = image { + if (image.sd_isAnimated) { + let frames:[SDImageFrame] = SDImageCoderHelper.frames(from: image)! + if frames.count > 0 { + var arr:[PowerImageFrame] = [] + for index in 0.. UIImage? { + + let name:String = requestConfig.srcString()! + let package:String? = requestConfig.src["package"] as? String + let fileName:String = NSString(string: name).lastPathComponent + let path:String = NSString(string: name).deletingLastPathComponent + + + let scaleArr:[Int] = (2...Int(UIScreen.main.scale)).reversed() + + for scale in scaleArr { + let key:String = self.lookupKeyForAsset(asset: String(format: "%s/%d.0x/%s", path,scale,fileName), package: package) + let image = UIImage(named: key,in: Bundle.main,compatibleWith: nil) + if image != nil { + return image! + } + } + + let key = self.lookupKeyForAsset(asset: name, package: package) + return UIImage(named: key,in: Bundle.main,compatibleWith: nil) + } + + private func lookupKeyForAsset(asset:String,package:String?) -> String { + if let package = package, package != "" { + return FlutterDartProject.lookupKey(forAsset: asset,fromPackage: package) + }else{ + return FlutterDartProject.lookupKey(forAsset: asset) + } + } + +``` + file loader example: ```objectivec - (void)handleRequest:(PowerImageRequestConfig *)requestConfig completed:(PowerImageLoaderCompletionBlock)completedBlock { @@ -199,6 +297,21 @@ file loader example: } ``` +```swift + +func handleRequest(_ requestConfig: PowerImageRequestConfig!, completed completedBlock: PowerImageLoaderCompletionBlock!) { + + let image = UIImage(contentsOfFile: requestConfig.srcString()) + + if let image = image { + completedBlock(PowerImageResult.success(with: image)) + }else{ + completedBlock(PowerImageResult.fail(withMessage: "PowerImageFileImageLoaderError!")) + } + } + +``` + ### Android PowerImage provides basic image types, including network, file, nativeAsset, and flutter assets. Users need to customize their corresponding loaders. diff --git a/README_CN.md b/README_CN.md index 810d8df..740e2fc 100644 --- a/README_CN.md +++ b/README_CN.md @@ -97,6 +97,14 @@ PowerImage 提供了基础的图片类型,包括网络图(network)、文 ``` +```swift + PowerImageLoader.sharedInstance().register(PowerImageNetworkImageLoader.init(), forType: kPowerImageImageTypeNetwork) + PowerImageLoader.sharedInstance().register(PowerImageAssetsImageLoader.init(), forType: kPowerImageImageTypeNativeAsset) + PowerImageLoader.sharedInstance().register(PowerImageFlutterAssertImageLoader.init(), forType: kPowerImageImageTypeAsset) + PowerImageLoader.sharedInstance().register(PowerImageFileImageLoader.init(), forType: kPowerImageImageTypeFile) +``` + + loader 需要遵循 PowerImageLoaderProtocol 协议: ```objectivec @@ -135,6 +143,38 @@ Network image loader example: } ``` + +```swift + +func handleRequest(_ requestConfig: PowerImageRequestConfig!, completed completedBlock: PowerImageLoaderCompletionBlock!) { + let reqSize:CGSize = requestConfig.originSize + let url = URL(string: requestConfig.srcString()) + SDWebImageManager.shared.loadImage(with: url, progress: nil) { image, data, error, cacheType, finished, url in + + if let image = image { + if (image.sd_isAnimated) { + let frames:[SDImageFrame] = SDImageCoderHelper.frames(from: image)! + if frames.count > 0 { + var arr:[PowerImageFrame] = [] + for index in 0.. UIImage? { + + let name:String = requestConfig.srcString()! + let package:String? = requestConfig.src["package"] as? String + let fileName:String = NSString(string: name).lastPathComponent + let path:String = NSString(string: name).deletingLastPathComponent + + + let scaleArr:[Int] = (2...Int(UIScreen.main.scale)).reversed() + + for scale in scaleArr { + let key:String = self.lookupKeyForAsset(asset: String(format: "%s/%d.0x/%s", path,scale,fileName), package: package) + let image = UIImage(named: key,in: Bundle.main,compatibleWith: nil) + if image != nil { + return image! + } + } + + let key = self.lookupKeyForAsset(asset: name, package: package) + return UIImage(named: key,in: Bundle.main,compatibleWith: nil) + } + + private func lookupKeyForAsset(asset:String,package:String?) -> String { + if let package = package, package != "" { + return FlutterDartProject.lookupKey(forAsset: asset,fromPackage: package) + }else{ + return FlutterDartProject.lookupKey(forAsset: asset) + } + } + +``` + file loader example: ```objectivec @@ -208,6 +308,21 @@ file loader example: } ``` +```swift + +func handleRequest(_ requestConfig: PowerImageRequestConfig!, completed completedBlock: PowerImageLoaderCompletionBlock!) { + + let image = UIImage(contentsOfFile: requestConfig.srcString()) + + if let image = image { + completedBlock(PowerImageResult.success(with: image)) + }else{ + completedBlock(PowerImageResult.fail(withMessage: "PowerImageFileImageLoaderError!")) + } + } + +``` + ### Android diff --git a/example_kotlin_swift/ios/Runner/Loaders/PowerImageNetworkImageLoader.swift b/example_kotlin_swift/ios/Runner/Loaders/PowerImageNetworkImageLoader.swift index ff7235f..fd84c81 100644 --- a/example_kotlin_swift/ios/Runner/Loaders/PowerImageNetworkImageLoader.swift +++ b/example_kotlin_swift/ios/Runner/Loaders/PowerImageNetworkImageLoader.swift @@ -11,13 +11,8 @@ import SDWebImage class PowerImageNetworkImageLoader:NSObject,PowerImageLoaderProtocol{ func handleRequest(_ requestConfig: PowerImageRequestConfig!, completed completedBlock: PowerImageLoaderCompletionBlock!) { - - let reqSize:CGSize = requestConfig.originSize - let url = URL(string: requestConfig.srcString()) - - SDWebImageManager.shared.loadImage(with: url, progress: nil) { image, data, error, cacheType, finished, url in if let image = image { @@ -41,8 +36,5 @@ class PowerImageNetworkImageLoader:NSObject,PowerImageLoaderProtocol{ completedBlock(PowerImageResult.fail(withMessage: error?.localizedDescription ?? "PowerImageNetworkLoaderError!")) } } - } - - }