diff --git a/README.md b/README.md index a743880..4a9131b 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 903e105..0ea5ee4 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!")) } } - } - - }