Repository files navigation

Longinus



Longinus

Longinus is a pure-Swift high-performance asynchronous web image loading,caching,editing framework.

It was learned from Objective-C web image loading framework YYWebImage and BBWebImage, bring lots of high performace features to Swift. It may become a better choice for you.

Longinus's goal is to become the Highest-Performance web image loading framework on Swift.

Feature

  • Asynchronous image downloading and caching.
  • Preload images and cache them to disk for further showing.
  • Animated GIF support (dynamic buffer, lower memory usage).
  • Baseline/progressive/interlaced image decode support.
  • View extensions for UIImageView, UIButton, MKAnnotationView(not yet) and CALayer to directly set an image from a URL.
  • Built-in transition animation when setting images.(or you can set your custom image showing transion)
  • Image Transform after downloading supported: blur, round corner, resize, color tint, crop, rotate and more.
  • High performance memory and disk image cache. Use LRU algorithm to manage. For disk cache, it use file system and sqlite for better performance.
  • Use FIFO queue to handle image downloading operation.
  • Smooth sliding without UI lags. High performance image caching and decoding to avoid main thread blocked.
  • SwiftUI support.

Usage

The simplest use-case is setting an image to an image view with the UIImageView extension:

leturl=URL(string:"http://github.com/logo.png")
imageView.lg.setImage(with: url)

Load animated gif image:

leturl=URL(string:"https://ww4.sinaimg.cn/bmiddle/eaeb7349jw1ewbhiu69i2g20b4069e86.gif")
imageView.lg.setImage(with: url)

Load image progressively:

leturl=URL(string:"http://github.com/logo.png")
imageView.lg.setImage(with: url, options:[.progressiveBlur,.imageWithFadeAnimation])

Load and transform image:

leturl=URL(string:"https://ww4.sinaimg.cn/bmiddle/eaeb7349jw1ewbhiu69i2g20b4069e86.gif")lettransformer=ImageTransformer.imageTransformerCommon(with: imageView.frame.size, borderWidth:2.0, borderColor:.white)
imageView.lg.setImage(with: url, options:[.progressiveBlur,.imageWithFadeAnimation], transformer: transformer)

Usage in SwiftUI:

import SwiftUI
// 1. If you are using SPM or Carthage, the SwiftUI support is defined in a new module.
import LonginusSwiftUI
// 2. If you are using CocoaPods, in which the SwiftUI support is defined in the Longinus module.
// Here we choose to just import the `LGImage` type instead of the whole module, // to prevent the conflicting between `Longinus.View` and `SwiftUI.View`
importstruct LonginusSwiftUI.LGImage
varbody:someView{LGImage(source:URL(string:"https://github.com/KittenYang/Template-Image-Set/blob/master/Landscape/landscape-\(index).jpg?raw=true"), placeholder:{Image(systemName:"arrow.2.circlepath").font(.largeTitle)}).onProgress(progress:{(data, expectedSize, _)inprint("Downloaded: \(data?.count ??0)/\(expectedSize)")}).onCompletion(completion:{(image, data, error, cacheType)iniflet error = error {print(error)}iflet _ = image {print("Success!")}}).resizable().cancelOnDisappear(true).aspectRatio(contentMode:.fill).frame(width:300, height:300).cornerRadius(20).shadow(radius:5)}

Requirements

  • iOS 10.0+
  • Swift 5.0+
  • SwiftUI 13.0+

Installation

CocoaPods

Longinus is available through CocoaPods. To install it, simply add the following line to your Podfile:

source'https://github.com/CocoaPods/Specs.git'platform:ios,'10.0'use_frameworks!target'MyApp'do# your other pod# ...pod'Longinus'# SwiftUI support is provided in a sub-spec. # So instead of specifying pod 'Longinus', # you need:# pod 'Longinus/SwiftUI'end

Then, run the following command:

$ pod install

You should open the {Project}.xcworkspace instead of the {Project}.xcodeproj after you installed anything from CocoaPods.

For more information about how to use CocoaPods, I suggest this tutorial.

Carthage

Carthage is a decentralized dependency manager for Cocoa application. To install the carthage tool, you can use Homebrew.

To integrate Longinus into your Xcode project using Carthage, specify it in your Cartfile:

github "KittenYang/Longinus" ~> 1.0

Then, run the following command to build the Longinus framework:

$ carthage update

Swift Package Manager

From Xcode 11, you can use Swift Package Manager to add Longinus to your project.

Select File > Swift Packages > Add Package Dependency. Enter https://github.com/KittenYang/Longinus.git in the "Choose Package Repository" dialog.

Benchmark

I tested some popular web image loading frameworks on iOS platform from some aspects.

  • Image loading speed.
  • Memory&Disk read/write/delete speed.
  • Scrolling 4000 images UI fps.

Here is the tested results. (Lower is better)

Note: The test device is iPhone 11, running on iOS 13.3

You can git clone this repo and run the Benchmark.xcworkspace to test it by yourself.

License

Longinus is available under the MIT license. See the LICENSE file for more info.

About

A pure Swift high-performance asynchronous image loading framework. SwiftUI supported.

Topics

Resources

Stars

328 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Longinus



Longinus

Longinus is a pure-Swift high-performance asynchronous web image loading,caching,editing framework.

It was learned from Objective-C web image loading framework YYWebImage and BBWebImage, bring lots of high performace features to Swift. It may become a better choice for you.

Longinus's goal is to become the Highest-Performance web image loading framework on Swift.

Feature

  • Asynchronous image downloading and caching.
  • Preload images and cache them to disk for further showing.
  • Animated GIF support (dynamic buffer, lower memory usage).
  • Baseline/progressive/interlaced image decode support.
  • View extensions for UIImageView, UIButton, MKAnnotationView(not yet) and CALayer to directly set an image from a URL.
  • Built-in transition animation when setting images.(or you can set your custom image showing transion)
  • Image Transform after downloading supported: blur, round corner, resize, color tint, crop, rotate and more.
  • High performance memory and disk image cache. Use LRU algorithm to manage. For disk cache, it use file system and sqlite for better performance.
  • Use FIFO queue to handle image downloading operation.
  • Smooth sliding without UI lags. High performance image caching and decoding to avoid main thread blocked.
  • SwiftUI support.

Usage

The simplest use-case is setting an image to an image view with the UIImageView extension:

leturl=URL(string:"http://github.com/logo.png")
imageView.lg.setImage(with: url)

Load animated gif image:

leturl=URL(string:"https://ww4.sinaimg.cn/bmiddle/eaeb7349jw1ewbhiu69i2g20b4069e86.gif")
imageView.lg.setImage(with: url)

Load image progressively:

leturl=URL(string:"http://github.com/logo.png")
imageView.lg.setImage(with: url, options:[.progressiveBlur,.imageWithFadeAnimation])

Load and transform image:

leturl=URL(string:"https://ww4.sinaimg.cn/bmiddle/eaeb7349jw1ewbhiu69i2g20b4069e86.gif")lettransformer=ImageTransformer.imageTransformerCommon(with: imageView.frame.size, borderWidth:2.0, borderColor:.white)
imageView.lg.setImage(with: url, options:[.progressiveBlur,.imageWithFadeAnimation], transformer: transformer)

Usage in SwiftUI:

import SwiftUI
// 1. If you are using SPM or Carthage, the SwiftUI support is defined in a new module.
import LonginusSwiftUI
// 2. If you are using CocoaPods, in which the SwiftUI support is defined in the Longinus module.
// Here we choose to just import the `LGImage` type instead of the whole module, // to prevent the conflicting between `Longinus.View` and `SwiftUI.View`
importstruct LonginusSwiftUI.LGImage
varbody:someView{LGImage(source:URL(string:"https://github.com/KittenYang/Template-Image-Set/blob/master/Landscape/landscape-\(index).jpg?raw=true"), placeholder:{Image(systemName:"arrow.2.circlepath").font(.largeTitle)}).onProgress(progress:{(data, expectedSize, _)inprint("Downloaded: \(data?.count ??0)/\(expectedSize)")}).onCompletion(completion:{(image, data, error, cacheType)iniflet error = error {print(error)}iflet _ = image {print("Success!")}}).resizable().cancelOnDisappear(true).aspectRatio(contentMode:.fill).frame(width:300, height:300).cornerRadius(20).shadow(radius:5)}

Requirements

  • iOS 10.0+
  • Swift 5.0+
  • SwiftUI 13.0+

Installation

CocoaPods

Longinus is available through CocoaPods. To install it, simply add the following line to your Podfile:

source'https://github.com/CocoaPods/Specs.git'platform:ios,'10.0'use_frameworks!target'MyApp'do# your other pod# ...pod'Longinus'# SwiftUI support is provided in a sub-spec. # So instead of specifying pod 'Longinus', # you need:# pod 'Longinus/SwiftUI'end

Then, run the following command:

$ pod install

You should open the {Project}.xcworkspace instead of the {Project}.xcodeproj after you installed anything from CocoaPods.

For more information about how to use CocoaPods, I suggest this tutorial.

Carthage

Carthage is a decentralized dependency manager for Cocoa application. To install the carthage tool, you can use Homebrew.

To integrate Longinus into your Xcode project using Carthage, specify it in your Cartfile:

github "KittenYang/Longinus" ~> 1.0

Then, run the following command to build the Longinus framework:

$ carthage update

Swift Package Manager

From Xcode 11, you can use Swift Package Manager to add Longinus to your project.

Select File > Swift Packages > Add Package Dependency. Enter https://github.com/KittenYang/Longinus.git in the "Choose Package Repository" dialog.

Benchmark

I tested some popular web image loading frameworks on iOS platform from some aspects.

  • Image loading speed.
  • Memory&Disk read/write/delete speed.
  • Scrolling 4000 images UI fps.

Here is the tested results. (Lower is better)

Note: The test device is iPhone 11, running on iOS 13.3

You can git clone this repo and run the Benchmark.xcworkspace to test it by yourself.

License

Longinus is available under the MIT license. See the LICENSE file for more info.

About

A pure Swift high-performance asynchronous image loading framework. SwiftUI supported.

Topics

Resources

Stars

328 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Longinus



Longinus

Longinus is a pure-Swift high-performance asynchronous web image loading,caching,editing framework.

It was learned from Objective-C web image loading framework YYWebImage and BBWebImage, bring lots of high performace features to Swift. It may become a better choice for you.

Longinus's goal is to become the Highest-Performance web image loading framework on Swift.

Feature

  • Asynchronous image downloading and caching.
  • Preload images and cache them to disk for further showing.
  • Animated GIF support (dynamic buffer, lower memory usage).
  • Baseline/progressive/interlaced image decode support.
  • View extensions for UIImageView, UIButton, MKAnnotationView(not yet) and CALayer to directly set an image from a URL.
  • Built-in transition animation when setting images.(or you can set your custom image showing transion)
  • Image Transform after downloading supported: blur, round corner, resize, color tint, crop, rotate and more.
  • High performance memory and disk image cache. Use LRU algorithm to manage. For disk cache, it use file system and sqlite for better performance.
  • Use FIFO queue to handle image downloading operation.
  • Smooth sliding without UI lags. High performance image caching and decoding to avoid main thread blocked.
  • SwiftUI support.

Usage

The simplest use-case is setting an image to an image view with the UIImageView extension:

leturl=URL(string:"http://github.com/logo.png")
imageView.lg.setImage(with: url)

Load animated gif image:

leturl=URL(string:"https://ww4.sinaimg.cn/bmiddle/eaeb7349jw1ewbhiu69i2g20b4069e86.gif")
imageView.lg.setImage(with: url)

Load image progressively:

leturl=URL(string:"http://github.com/logo.png")
imageView.lg.setImage(with: url, options:[.progressiveBlur,.imageWithFadeAnimation])

Load and transform image:

leturl=URL(string:"https://ww4.sinaimg.cn/bmiddle/eaeb7349jw1ewbhiu69i2g20b4069e86.gif")lettransformer=ImageTransformer.imageTransformerCommon(with: imageView.frame.size, borderWidth:2.0, borderColor:.white)
imageView.lg.setImage(with: url, options:[.progressiveBlur,.imageWithFadeAnimation], transformer: transformer)

Usage in SwiftUI:

import SwiftUI
// 1. If you are using SPM or Carthage, the SwiftUI support is defined in a new module.
import LonginusSwiftUI
// 2. If you are using CocoaPods, in which the SwiftUI support is defined in the Longinus module.
// Here we choose to just import the `LGImage` type instead of the whole module, // to prevent the conflicting between `Longinus.View` and `SwiftUI.View`
importstruct LonginusSwiftUI.LGImage
varbody:someView{LGImage(source:URL(string:"https://github.com/KittenYang/Template-Image-Set/blob/master/Landscape/landscape-\(index).jpg?raw=true"), placeholder:{Image(systemName:"arrow.2.circlepath").font(.largeTitle)}).onProgress(progress:{(data, expectedSize, _)inprint("Downloaded: \(data?.count ??0)/\(expectedSize)")}).onCompletion(completion:{(image, data, error, cacheType)iniflet error = error {print(error)}iflet _ = image {print("Success!")}}).resizable().cancelOnDisappear(true).aspectRatio(contentMode:.fill).frame(width:300, height:300).cornerRadius(20).shadow(radius:5)}

Requirements

  • iOS 10.0+
  • Swift 5.0+
  • SwiftUI 13.0+

Installation

CocoaPods

Longinus is available through CocoaPods. To install it, simply add the following line to your Podfile:

source'https://github.com/CocoaPods/Specs.git'platform:ios,'10.0'use_frameworks!target'MyApp'do# your other pod# ...pod'Longinus'# SwiftUI support is provided in a sub-spec. # So instead of specifying pod 'Longinus', # you need:# pod 'Longinus/SwiftUI'end

Then, run the following command:

$ pod install

You should open the {Project}.xcworkspace instead of the {Project}.xcodeproj after you installed anything from CocoaPods.

For more information about how to use CocoaPods, I suggest this tutorial.

Carthage

Carthage is a decentralized dependency manager for Cocoa application. To install the carthage tool, you can use Homebrew.

To integrate Longinus into your Xcode project using Carthage, specify it in your Cartfile:

github "KittenYang/Longinus" ~> 1.0

Then, run the following command to build the Longinus framework:

$ carthage update

Swift Package Manager

From Xcode 11, you can use Swift Package Manager to add Longinus to your project.

Select File > Swift Packages > Add Package Dependency. Enter https://github.com/KittenYang/Longinus.git in the "Choose Package Repository" dialog.

Benchmark

I tested some popular web image loading frameworks on iOS platform from some aspects.

  • Image loading speed.
  • Memory&Disk read/write/delete speed.
  • Scrolling 4000 images UI fps.

Here is the tested results. (Lower is better)

Note: The test device is iPhone 11, running on iOS 13.3

You can git clone this repo and run the Benchmark.xcworkspace to test it by yourself.

License

Longinus is available under the MIT license. See the LICENSE file for more info.

About

A pure Swift high-performance asynchronous image loading framework. SwiftUI supported.

Topics

Resources

Stars

328 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Longinus



Longinus

Longinus is a pure-Swift high-performance asynchronous web image loading,caching,editing framework.

It was learned from Objective-C web image loading framework YYWebImage and BBWebImage, bring lots of high performace features to Swift. It may become a better choice for you.

Longinus's goal is to become the Highest-Performance web image loading framework on Swift.

Feature

  • Asynchronous image downloading and caching.
  • Preload images and cache them to disk for further showing.
  • Animated GIF support (dynamic buffer, lower memory usage).
  • Baseline/progressive/interlaced image decode support.
  • View extensions for UIImageView, UIButton, MKAnnotationView(not yet) and CALayer to directly set an image from a URL.
  • Built-in transition animation when setting images.(or you can set your custom image showing transion)
  • Image Transform after downloading supported: blur, round corner, resize, color tint, crop, rotate and more.
  • High performance memory and disk image cache. Use LRU algorithm to manage. For disk cache, it use file system and sqlite for better performance.
  • Use FIFO queue to handle image downloading operation.
  • Smooth sliding without UI lags. High performance image caching and decoding to avoid main thread blocked.
  • SwiftUI support.

Usage

The simplest use-case is setting an image to an image view with the UIImageView extension:

leturl=URL(string:"http://github.com/logo.png")
imageView.lg.setImage(with: url)

Load animated gif image:

leturl=URL(string:"https://ww4.sinaimg.cn/bmiddle/eaeb7349jw1ewbhiu69i2g20b4069e86.gif")
imageView.lg.setImage(with: url)

Load image progressively:

leturl=URL(string:"http://github.com/logo.png")
imageView.lg.setImage(with: url, options:[.progressiveBlur,.imageWithFadeAnimation])

Load and transform image:

leturl=URL(string:"https://ww4.sinaimg.cn/bmiddle/eaeb7349jw1ewbhiu69i2g20b4069e86.gif")lettransformer=ImageTransformer.imageTransformerCommon(with: imageView.frame.size, borderWidth:2.0, borderColor:.white)
imageView.lg.setImage(with: url, options:[.progressiveBlur,.imageWithFadeAnimation], transformer: transformer)

Usage in SwiftUI:

import SwiftUI
// 1. If you are using SPM or Carthage, the SwiftUI support is defined in a new module.
import LonginusSwiftUI
// 2. If you are using CocoaPods, in which the SwiftUI support is defined in the Longinus module.
// Here we choose to just import the `LGImage` type instead of the whole module, // to prevent the conflicting between `Longinus.View` and `SwiftUI.View`
importstruct LonginusSwiftUI.LGImage
varbody:someView{LGImage(source:URL(string:"https://github.com/KittenYang/Template-Image-Set/blob/master/Landscape/landscape-\(index).jpg?raw=true"), placeholder:{Image(systemName:"arrow.2.circlepath").font(.largeTitle)}).onProgress(progress:{(data, expectedSize, _)inprint("Downloaded: \(data?.count ??0)/\(expectedSize)")}).onCompletion(completion:{(image, data, error, cacheType)iniflet error = error {print(error)}iflet _ = image {print("Success!")}}).resizable().cancelOnDisappear(true).aspectRatio(contentMode:.fill).frame(width:300, height:300).cornerRadius(20).shadow(radius:5)}

Requirements

  • iOS 10.0+
  • Swift 5.0+
  • SwiftUI 13.0+

Installation

CocoaPods

Longinus is available through CocoaPods. To install it, simply add the following line to your Podfile:

source'https://github.com/CocoaPods/Specs.git'platform:ios,'10.0'use_frameworks!target'MyApp'do# your other pod# ...pod'Longinus'# SwiftUI support is provided in a sub-spec. # So instead of specifying pod 'Longinus', # you need:# pod 'Longinus/SwiftUI'end

Then, run the following command:

$ pod install

You should open the {Project}.xcworkspace instead of the {Project}.xcodeproj after you installed anything from CocoaPods.

For more information about how to use CocoaPods, I suggest this tutorial.

Carthage

Carthage is a decentralized dependency manager for Cocoa application. To install the carthage tool, you can use Homebrew.

To integrate Longinus into your Xcode project using Carthage, specify it in your Cartfile:

github "KittenYang/Longinus" ~> 1.0

Then, run the following command to build the Longinus framework:

$ carthage update

Swift Package Manager

From Xcode 11, you can use Swift Package Manager to add Longinus to your project.

Select File > Swift Packages > Add Package Dependency. Enter https://github.com/KittenYang/Longinus.git in the "Choose Package Repository" dialog.

Benchmark

I tested some popular web image loading frameworks on iOS platform from some aspects.

  • Image loading speed.
  • Memory&Disk read/write/delete speed.
  • Scrolling 4000 images UI fps.

Here is the tested results. (Lower is better)

Note: The test device is iPhone 11, running on iOS 13.3

You can git clone this repo and run the Benchmark.xcworkspace to test it by yourself.

License

Longinus is available under the MIT license. See the LICENSE file for more info.

About

A pure Swift high-performance asynchronous image loading framework. SwiftUI supported.

Topics

Resources

Stars

328 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Longinus



Longinus

Longinus is a pure-Swift high-performance asynchronous web image loading,caching,editing framework.

It was learned from Objective-C web image loading framework YYWebImage and BBWebImage, bring lots of high performace features to Swift. It may become a better choice for you.

Longinus's goal is to become the Highest-Performance web image loading framework on Swift.

Feature

  • Asynchronous image downloading and caching.
  • Preload images and cache them to disk for further showing.
  • Animated GIF support (dynamic buffer, lower memory usage).
  • Baseline/progressive/interlaced image decode support.
  • View extensions for UIImageView, UIButton, MKAnnotationView(not yet) and CALayer to directly set an image from a URL.
  • Built-in transition animation when setting images.(or you can set your custom image showing transion)
  • Image Transform after downloading supported: blur, round corner, resize, color tint, crop, rotate and more.
  • High performance memory and disk image cache. Use LRU algorithm to manage. For disk cache, it use file system and sqlite for better performance.
  • Use FIFO queue to handle image downloading operation.
  • Smooth sliding without UI lags. High performance image caching and decoding to avoid main thread blocked.
  • SwiftUI support.

Usage

The simplest use-case is setting an image to an image view with the UIImageView extension:

leturl=URL(string:"http://github.com/logo.png")
imageView.lg.setImage(with: url)

Load animated gif image:

leturl=URL(string:"https://ww4.sinaimg.cn/bmiddle/eaeb7349jw1ewbhiu69i2g20b4069e86.gif")
imageView.lg.setImage(with: url)

Load image progressively:

leturl=URL(string:"http://github.com/logo.png")
imageView.lg.setImage(with: url, options:[.progressiveBlur,.imageWithFadeAnimation])

Load and transform image:

leturl=URL(string:"https://ww4.sinaimg.cn/bmiddle/eaeb7349jw1ewbhiu69i2g20b4069e86.gif")lettransformer=ImageTransformer.imageTransformerCommon(with: imageView.frame.size, borderWidth:2.0, borderColor:.white)
imageView.lg.setImage(with: url, options:[.progressiveBlur,.imageWithFadeAnimation], transformer: transformer)

Usage in SwiftUI:

import SwiftUI
// 1. If you are using SPM or Carthage, the SwiftUI support is defined in a new module.
import LonginusSwiftUI
// 2. If you are using CocoaPods, in which the SwiftUI support is defined in the Longinus module.
// Here we choose to just import the `LGImage` type instead of the whole module, // to prevent the conflicting between `Longinus.View` and `SwiftUI.View`
importstruct LonginusSwiftUI.LGImage
varbody:someView{LGImage(source:URL(string:"https://github.com/KittenYang/Template-Image-Set/blob/master/Landscape/landscape-\(index).jpg?raw=true"), placeholder:{Image(systemName:"arrow.2.circlepath").font(.largeTitle)}).onProgress(progress:{(data, expectedSize, _)inprint("Downloaded: \(data?.count ??0)/\(expectedSize)")}).onCompletion(completion:{(image, data, error, cacheType)iniflet error = error {print(error)}iflet _ = image {print("Success!")}}).resizable().cancelOnDisappear(true).aspectRatio(contentMode:.fill).frame(width:300, height:300).cornerRadius(20).shadow(radius:5)}

Requirements

  • iOS 10.0+
  • Swift 5.0+
  • SwiftUI 13.0+

Installation

CocoaPods

Longinus is available through CocoaPods. To install it, simply add the following line to your Podfile:

source'https://github.com/CocoaPods/Specs.git'platform:ios,'10.0'use_frameworks!target'MyApp'do# your other pod# ...pod'Longinus'# SwiftUI support is provided in a sub-spec. # So instead of specifying pod 'Longinus', # you need:# pod 'Longinus/SwiftUI'end

Then, run the following command:

$ pod install

You should open the {Project}.xcworkspace instead of the {Project}.xcodeproj after you installed anything from CocoaPods.

For more information about how to use CocoaPods, I suggest this tutorial.

Carthage

Carthage is a decentralized dependency manager for Cocoa application. To install the carthage tool, you can use Homebrew.

To integrate Longinus into your Xcode project using Carthage, specify it in your Cartfile:

github "KittenYang/Longinus" ~> 1.0

Then, run the following command to build the Longinus framework:

$ carthage update

Swift Package Manager

From Xcode 11, you can use Swift Package Manager to add Longinus to your project.

Select File > Swift Packages > Add Package Dependency. Enter https://github.com/KittenYang/Longinus.git in the "Choose Package Repository" dialog.

Benchmark

I tested some popular web image loading frameworks on iOS platform from some aspects.

  • Image loading speed.
  • Memory&Disk read/write/delete speed.
  • Scrolling 4000 images UI fps.

Here is the tested results. (Lower is better)

Note: The test device is iPhone 11, running on iOS 13.3

You can git clone this repo and run the Benchmark.xcworkspace to test it by yourself.

License

Longinus is available under the MIT license. See the LICENSE file for more info.

About

A pure Swift high-performance asynchronous image loading framework. SwiftUI supported.

Topics

Resources

Stars

328 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Longinus



Longinus

Longinus is a pure-Swift high-performance asynchronous web image loading,caching,editing framework.

It was learned from Objective-C web image loading framework YYWebImage and BBWebImage, bring lots of high performace features to Swift. It may become a better choice for you.

Longinus's goal is to become the Highest-Performance web image loading framework on Swift.

Feature

  • Asynchronous image downloading and caching.
  • Preload images and cache them to disk for further showing.
  • Animated GIF support (dynamic buffer, lower memory usage).
  • Baseline/progressive/interlaced image decode support.
  • View extensions for UIImageView, UIButton, MKAnnotationView(not yet) and CALayer to directly set an image from a URL.
  • Built-in transition animation when setting images.(or you can set your custom image showing transion)
  • Image Transform after downloading supported: blur, round corner, resize, color tint, crop, rotate and more.
  • High performance memory and disk image cache. Use LRU algorithm to manage. For disk cache, it use file system and sqlite for better performance.
  • Use FIFO queue to handle image downloading operation.
  • Smooth sliding without UI lags. High performance image caching and decoding to avoid main thread blocked.
  • SwiftUI support.

Usage

The simplest use-case is setting an image to an image view with the UIImageView extension:

leturl=URL(string:"http://github.com/logo.png")
imageView.lg.setImage(with: url)

Load animated gif image:

leturl=URL(string:"https://ww4.sinaimg.cn/bmiddle/eaeb7349jw1ewbhiu69i2g20b4069e86.gif")
imageView.lg.setImage(with: url)

Load image progressively:

leturl=URL(string:"http://github.com/logo.png")
imageView.lg.setImage(with: url, options:[.progressiveBlur,.imageWithFadeAnimation])

Load and transform image:

leturl=URL(string:"https://ww4.sinaimg.cn/bmiddle/eaeb7349jw1ewbhiu69i2g20b4069e86.gif")lettransformer=ImageTransformer.imageTransformerCommon(with: imageView.frame.size, borderWidth:2.0, borderColor:.white)
imageView.lg.setImage(with: url, options:[.progressiveBlur,.imageWithFadeAnimation], transformer: transformer)

Usage in SwiftUI:

import SwiftUI
// 1. If you are using SPM or Carthage, the SwiftUI support is defined in a new module.
import LonginusSwiftUI
// 2. If you are using CocoaPods, in which the SwiftUI support is defined in the Longinus module.
// Here we choose to just import the `LGImage` type instead of the whole module, // to prevent the conflicting between `Longinus.View` and `SwiftUI.View`
importstruct LonginusSwiftUI.LGImage
varbody:someView{LGImage(source:URL(string:"https://github.com/KittenYang/Template-Image-Set/blob/master/Landscape/landscape-\(index).jpg?raw=true"), placeholder:{Image(systemName:"arrow.2.circlepath").font(.largeTitle)}).onProgress(progress:{(data, expectedSize, _)inprint("Downloaded: \(data?.count ??0)/\(expectedSize)")}).onCompletion(completion:{(image, data, error, cacheType)iniflet error = error {print(error)}iflet _ = image {print("Success!")}}).resizable().cancelOnDisappear(true).aspectRatio(contentMode:.fill).frame(width:300, height:300).cornerRadius(20).shadow(radius:5)}

Requirements

  • iOS 10.0+
  • Swift 5.0+
  • SwiftUI 13.0+

Installation

CocoaPods

Longinus is available through CocoaPods. To install it, simply add the following line to your Podfile:

source'https://github.com/CocoaPods/Specs.git'platform:ios,'10.0'use_frameworks!target'MyApp'do# your other pod# ...pod'Longinus'# SwiftUI support is provided in a sub-spec. # So instead of specifying pod 'Longinus', # you need:# pod 'Longinus/SwiftUI'end

Then, run the following command:

$ pod install

You should open the {Project}.xcworkspace instead of the {Project}.xcodeproj after you installed anything from CocoaPods.

For more information about how to use CocoaPods, I suggest this tutorial.

Carthage

Carthage is a decentralized dependency manager for Cocoa application. To install the carthage tool, you can use Homebrew.

To integrate Longinus into your Xcode project using Carthage, specify it in your Cartfile:

github "KittenYang/Longinus" ~> 1.0

Then, run the following command to build the Longinus framework:

$ carthage update

Swift Package Manager

From Xcode 11, you can use Swift Package Manager to add Longinus to your project.

Select File > Swift Packages > Add Package Dependency. Enter https://github.com/KittenYang/Longinus.git in the "Choose Package Repository" dialog.

Benchmark

I tested some popular web image loading frameworks on iOS platform from some aspects.

  • Image loading speed.
  • Memory&Disk read/write/delete speed.
  • Scrolling 4000 images UI fps.

Here is the tested results. (Lower is better)

Note: The test device is iPhone 11, running on iOS 13.3

You can git clone this repo and run the Benchmark.xcworkspace to test it by yourself.

License

Longinus is available under the MIT license. See the LICENSE file for more info.

About

A pure Swift high-performance asynchronous image loading framework. SwiftUI supported.

Topics

Resources

Stars

328 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Longinus



Longinus

Longinus is a pure-Swift high-performance asynchronous web image loading,caching,editing framework.

It was learned from Objective-C web image loading framework YYWebImage and BBWebImage, bring lots of high performace features to Swift. It may become a better choice for you.

Longinus's goal is to become the Highest-Performance web image loading framework on Swift.

Feature

  • Asynchronous image downloading and caching.
  • Preload images and cache them to disk for further showing.
  • Animated GIF support (dynamic buffer, lower memory usage).
  • Baseline/progressive/interlaced image decode support.
  • View extensions for UIImageView, UIButton, MKAnnotationView(not yet) and CALayer to directly set an image from a URL.
  • Built-in transition animation when setting images.(or you can set your custom image showing transion)
  • Image Transform after downloading supported: blur, round corner, resize, color tint, crop, rotate and more.
  • High performance memory and disk image cache. Use LRU algorithm to manage. For disk cache, it use file system and sqlite for better performance.
  • Use FIFO queue to handle image downloading operation.
  • Smooth sliding without UI lags. High performance image caching and decoding to avoid main thread blocked.
  • SwiftUI support.

Usage

The simplest use-case is setting an image to an image view with the UIImageView extension:

leturl=URL(string:"http://github.com/logo.png")
imageView.lg.setImage(with: url)

Load animated gif image:

leturl=URL(string:"https://ww4.sinaimg.cn/bmiddle/eaeb7349jw1ewbhiu69i2g20b4069e86.gif")
imageView.lg.setImage(with: url)

Load image progressively:

leturl=URL(string:"http://github.com/logo.png")
imageView.lg.setImage(with: url, options:[.progressiveBlur,.imageWithFadeAnimation])

Load and transform image:

leturl=URL(string:"https://ww4.sinaimg.cn/bmiddle/eaeb7349jw1ewbhiu69i2g20b4069e86.gif")lettransformer=ImageTransformer.imageTransformerCommon(with: imageView.frame.size, borderWidth:2.0, borderColor:.white)
imageView.lg.setImage(with: url, options:[.progressiveBlur,.imageWithFadeAnimation], transformer: transformer)

Usage in SwiftUI:

import SwiftUI
// 1. If you are using SPM or Carthage, the SwiftUI support is defined in a new module.
import LonginusSwiftUI
// 2. If you are using CocoaPods, in which the SwiftUI support is defined in the Longinus module.
// Here we choose to just import the `LGImage` type instead of the whole module, // to prevent the conflicting between `Longinus.View` and `SwiftUI.View`
importstruct LonginusSwiftUI.LGImage
varbody:someView{LGImage(source:URL(string:"https://github.com/KittenYang/Template-Image-Set/blob/master/Landscape/landscape-\(index).jpg?raw=true"), placeholder:{Image(systemName:"arrow.2.circlepath").font(.largeTitle)}).onProgress(progress:{(data, expectedSize, _)inprint("Downloaded: \(data?.count ??0)/\(expectedSize)")}).onCompletion(completion:{(image, data, error, cacheType)iniflet error = error {print(error)}iflet _ = image {print("Success!")}}).resizable().cancelOnDisappear(true).aspectRatio(contentMode:.fill).frame(width:300, height:300).cornerRadius(20).shadow(radius:5)}

Requirements

  • iOS 10.0+
  • Swift 5.0+
  • SwiftUI 13.0+

Installation

CocoaPods

Longinus is available through CocoaPods. To install it, simply add the following line to your Podfile:

source'https://github.com/CocoaPods/Specs.git'platform:ios,'10.0'use_frameworks!target'MyApp'do# your other pod# ...pod'Longinus'# SwiftUI support is provided in a sub-spec. # So instead of specifying pod 'Longinus', # you need:# pod 'Longinus/SwiftUI'end

Then, run the following command:

$ pod install

You should open the {Project}.xcworkspace instead of the {Project}.xcodeproj after you installed anything from CocoaPods.

For more information about how to use CocoaPods, I suggest this tutorial.

Carthage

Carthage is a decentralized dependency manager for Cocoa application. To install the carthage tool, you can use Homebrew.

To integrate Longinus into your Xcode project using Carthage, specify it in your Cartfile:

github "KittenYang/Longinus" ~> 1.0

Then, run the following command to build the Longinus framework:

$ carthage update

Swift Package Manager

From Xcode 11, you can use Swift Package Manager to add Longinus to your project.

Select File > Swift Packages > Add Package Dependency. Enter https://github.com/KittenYang/Longinus.git in the "Choose Package Repository" dialog.

Benchmark

I tested some popular web image loading frameworks on iOS platform from some aspects.

  • Image loading speed.
  • Memory&Disk read/write/delete speed.
  • Scrolling 4000 images UI fps.

Here is the tested results. (Lower is better)

Note: The test device is iPhone 11, running on iOS 13.3

You can git clone this repo and run the Benchmark.xcworkspace to test it by yourself.

License

Longinus is available under the MIT license. See the LICENSE file for more info.

About

A pure Swift high-performance asynchronous image loading framework. SwiftUI supported.

Topics

Resources

Stars

328 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Longinus



Longinus

Longinus is a pure-Swift high-performance asynchronous web image loading,caching,editing framework.

It was learned from Objective-C web image loading framework YYWebImage and BBWebImage, bring lots of high performace features to Swift. It may become a better choice for you.

Longinus's goal is to become the Highest-Performance web image loading framework on Swift.

Feature

  • Asynchronous image downloading and caching.
  • Preload images and cache them to disk for further showing.
  • Animated GIF support (dynamic buffer, lower memory usage).
  • Baseline/progressive/interlaced image decode support.
  • View extensions for UIImageView, UIButton, MKAnnotationView(not yet) and CALayer to directly set an image from a URL.
  • Built-in transition animation when setting images.(or you can set your custom image showing transion)
  • Image Transform after downloading supported: blur, round corner, resize, color tint, crop, rotate and more.
  • High performance memory and disk image cache. Use LRU algorithm to manage. For disk cache, it use file system and sqlite for better performance.
  • Use FIFO queue to handle image downloading operation.
  • Smooth sliding without UI lags. High performance image caching and decoding to avoid main thread blocked.
  • SwiftUI support.

Usage

The simplest use-case is setting an image to an image view with the UIImageView extension:

leturl=URL(string:"http://github.com/logo.png")
imageView.lg.setImage(with: url)

Load animated gif image:

leturl=URL(string:"https://ww4.sinaimg.cn/bmiddle/eaeb7349jw1ewbhiu69i2g20b4069e86.gif")
imageView.lg.setImage(with: url)

Load image progressively:

leturl=URL(string:"http://github.com/logo.png")
imageView.lg.setImage(with: url, options:[.progressiveBlur,.imageWithFadeAnimation])

Load and transform image:

leturl=URL(string:"https://ww4.sinaimg.cn/bmiddle/eaeb7349jw1ewbhiu69i2g20b4069e86.gif")lettransformer=ImageTransformer.imageTransformerCommon(with: imageView.frame.size, borderWidth:2.0, borderColor:.white)
imageView.lg.setImage(with: url, options:[.progressiveBlur,.imageWithFadeAnimation], transformer: transformer)

Usage in SwiftUI:

import SwiftUI
// 1. If you are using SPM or Carthage, the SwiftUI support is defined in a new module.
import LonginusSwiftUI
// 2. If you are using CocoaPods, in which the SwiftUI support is defined in the Longinus module.
// Here we choose to just import the `LGImage` type instead of the whole module, // to prevent the conflicting between `Longinus.View` and `SwiftUI.View`
importstruct LonginusSwiftUI.LGImage
varbody:someView{LGImage(source:URL(string:"https://github.com/KittenYang/Template-Image-Set/blob/master/Landscape/landscape-\(index).jpg?raw=true"), placeholder:{Image(systemName:"arrow.2.circlepath").font(.largeTitle)}).onProgress(progress:{(data, expectedSize, _)inprint("Downloaded: \(data?.count ??0)/\(expectedSize)")}).onCompletion(completion:{(image, data, error, cacheType)iniflet error = error {print(error)}iflet _ = image {print("Success!")}}).resizable().cancelOnDisappear(true).aspectRatio(contentMode:.fill).frame(width:300, height:300).cornerRadius(20).shadow(radius:5)}

Requirements

  • iOS 10.0+
  • Swift 5.0+
  • SwiftUI 13.0+

Installation

CocoaPods

Longinus is available through CocoaPods. To install it, simply add the following line to your Podfile:

source'https://github.com/CocoaPods/Specs.git'platform:ios,'10.0'use_frameworks!target'MyApp'do# your other pod# ...pod'Longinus'# SwiftUI support is provided in a sub-spec. # So instead of specifying pod 'Longinus', # you need:# pod 'Longinus/SwiftUI'end

Then, run the following command:

$ pod install

You should open the {Project}.xcworkspace instead of the {Project}.xcodeproj after you installed anything from CocoaPods.

For more information about how to use CocoaPods, I suggest this tutorial.

Carthage

Carthage is a decentralized dependency manager for Cocoa application. To install the carthage tool, you can use Homebrew.

To integrate Longinus into your Xcode project using Carthage, specify it in your Cartfile:

github "KittenYang/Longinus" ~> 1.0

Then, run the following command to build the Longinus framework:

$ carthage update

Swift Package Manager

From Xcode 11, you can use Swift Package Manager to add Longinus to your project.

Select File > Swift Packages > Add Package Dependency. Enter https://github.com/KittenYang/Longinus.git in the "Choose Package Repository" dialog.

Benchmark

I tested some popular web image loading frameworks on iOS platform from some aspects.

  • Image loading speed.
  • Memory&Disk read/write/delete speed.
  • Scrolling 4000 images UI fps.

Here is the tested results. (Lower is better)

Note: The test device is iPhone 11, running on iOS 13.3

You can git clone this repo and run the Benchmark.xcworkspace to test it by yourself.

License

Longinus is available under the MIT license. See the LICENSE file for more info.

About

A pure Swift high-performance asynchronous image loading framework. SwiftUI supported.

Topics

Resources

Stars

328 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages