Skip to content

Commit

Permalink
Merge pull request #2 from luckysmg/task/task_example_kotlin_swift
Browse files Browse the repository at this point in the history
ReadME中添加swift示例代码
  • Loading branch information
ksballetba committed May 31, 2022
2 parents 3ccae0e + 561fa38 commit 96cb6d9
Show file tree
Hide file tree
Showing 3 changed files with 228 additions and 8 deletions.
113 changes: 113 additions & 0 deletions README.md
Expand Up @@ -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:

Expand Down Expand Up @@ -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..<frames.count {
let frame:SDImageFrame = frames[index]
arr.append(PowerImageFrame(image: frame.image, duration: frame.duration))
}
let flutterImage = PowerFlutterMultiFrameImage(image: image, frames: arr)
completedBlock(PowerImageResult.success(with: flutterImage))
return
}
}

completedBlock(PowerImageResult.success(with: image))

}else{
completedBlock(PowerImageResult.fail(withMessage: error?.localizedDescription ?? "PowerImageNetworkLoaderError!"))
}
}
}
```

native asset loader example:
```objectivec
- (void)handleRequest:(PowerImageRequestConfig *)requestConfig completed:(PowerImageLoaderCompletionBlock)completedBlock {
Expand All @@ -141,6 +180,21 @@ native asset loader example:
}
```

```swift

func handleRequest(_ requestConfig: PowerImageRequestConfig!, completed completedBlock: PowerImageLoaderCompletionBlock!) {

let image = UIImage(named: requestConfig.srcString())

if let image = image {
completedBlock(PowerImageResult.success(with: image))
}else{
completedBlock(PowerImageResult.fail(withMessage: "PowerImageAssetsImageLoaderError!"))
}
}

```

flutter asset loader example:
```objectivec
- (void)handleRequest:(PowerImageRequestConfig *)requestConfig completed:(PowerImageLoaderCompletionBlock)completedBlock {
Expand Down Expand Up @@ -185,6 +239,50 @@ flutter asset loader example:

```

```swift

func handleRequest(_ requestConfig: PowerImageRequestConfig!, completed completedBlock: PowerImageLoaderCompletionBlock!) {
let image = self.flutterImage(requestConfig: requestConfig)
if let image = image {
completedBlock(PowerImageResult.success(with: image))
}else {
completedBlock(PowerImageResult.fail(withMessage: "PowerImageFlutterAssertImageLoaderError"))
}
}


private func flutterImage(requestConfig:PowerImageRequestConfig) -> 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 {
Expand All @@ -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.
Expand Down
115 changes: 115 additions & 0 deletions README_CN.md
Expand Up @@ -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
Expand Down Expand Up @@ -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..<frames.count {
let frame:SDImageFrame = frames[index]
arr.append(PowerImageFrame(image: frame.image, duration: frame.duration))
}
let flutterImage = PowerFlutterMultiFrameImage(image: image, frames: arr)
completedBlock(PowerImageResult.success(with: flutterImage))
return
}
}

completedBlock(PowerImageResult.success(with: image))

}else{
completedBlock(PowerImageResult.fail(withMessage: error?.localizedDescription ?? "PowerImageNetworkLoaderError!"))
}
}
}
```

native asset loader example:

```objectivec
Expand All @@ -148,6 +188,22 @@ native asset loader example:
}
```


```swift

func handleRequest(_ requestConfig: PowerImageRequestConfig!, completed completedBlock: PowerImageLoaderCompletionBlock!) {

let image = UIImage(named: requestConfig.srcString())

if let image = image {
completedBlock(PowerImageResult.success(with: image))
}else{
completedBlock(PowerImageResult.fail(withMessage: "PowerImageAssetsImageLoaderError!"))
}
}

```

flutter asset loader example:

```objectivec
Expand Down Expand Up @@ -193,6 +249,50 @@ flutter asset loader example:

```

```swift

func handleRequest(_ requestConfig: PowerImageRequestConfig!, completed completedBlock: PowerImageLoaderCompletionBlock!) {
let image = self.flutterImage(requestConfig: requestConfig)
if let image = image {
completedBlock(PowerImageResult.success(with: image))
}else {
completedBlock(PowerImageResult.fail(withMessage: "PowerImageFlutterAssertImageLoaderError"))
}
}


private func flutterImage(requestConfig:PowerImageRequestConfig) -> 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
Expand All @@ -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

Expand Down
Expand Up @@ -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 {
Expand All @@ -41,8 +36,5 @@ class PowerImageNetworkImageLoader:NSObject,PowerImageLoaderProtocol{
completedBlock(PowerImageResult.fail(withMessage: error?.localizedDescription ?? "PowerImageNetworkLoaderError!"))
}
}

}


}

0 comments on commit 96cb6d9

Please sign in to comment.