SDWebImageSwiftUI:基于SDWebImage的SwiftUI图像加载框架





项目名称:SDWebImageSwiftUI

项目概述

SDWebImageSwiftUI是一个基于SDWebImage的SwiftUI图像加载框架,它将SDWebImage的所有特性引入到SwiftUI中,包括异步图像加载、内存/磁盘缓存、动画图像播放等。该框架提供了与SwiftUI框架指南相匹配的视图结构,使得熟悉Image的开发者可以轻松使用WebImageAnimatedImage

主要功能

  • 异步图像加载:支持从网络加载图像。

  • 内存/磁盘缓存:提供图像的缓存机制,减少网络请求。

  • 动画图像播放:支持GIF/APNG/WebP/HEIF/AVIF/SVG/PDF等动画图像格式。

  • 性能优化:针对SwiftUI进行优化,包括绑定、视图修饰符等。

  • 可重用下载:避免对同一URL的重复请求。

  • URL请求/响应修改器:允许自定义HTTP头部。

  • 图像转换器:应用圆角或CIFilter等效果。

  • 多缓存系统:从不同源查询图像。

  • 多加载器系统:从不同资源加载图像。

使用示例

以下是如何使用SDWebImageSwiftUI中的WebImageAnimatedImage的示例代码:

使用 WebImage 加载网络图像

var body: some View {
    WebImage(url: URL(string: "https://nokiatech.github.io/heif/content/images/ski_jump_1440x960.heic")) { image in
        image.resizable() // Control layout like SwiftUI.AsyncImage, you must use this modifier or the view will use the image bitmap size
    } placeholder: {
            Rectangle().foregroundColor(.gray)
    }
    // Supports options and context, like `.delayPlaceholder` to show placeholder only when error
    .onSuccess { image, data, cacheType in
        // Success
        // Note: Data exist only when queried from disk cache or network. Use `.queryMemoryData` if you really need data
    }
    .indicator(.activity) // Activity Indicator
    .transition(.fade(duration: 0.5)) // Fade Transition with duration
    .scaledToFit()
    .frame(width: 300, height: 300, alignment: .center)
}

使用 AnimatedImage 播放动画

var body: some View {
    Group {
        AnimatedImage(url: URL(string: "https://raw.githubusercontent.com/liyong03/YLGIFImage/master/YLGIFImageDemo/YLGIFImageDemo/joy.gif"), placeholderImage: .init(systemName: "photo")) // Placeholder Image
        // Supports options and context, like `.progressiveLoad` for progressive animation loading
        .onFailure { error in
            // Error
        }
        .resizable() // Resizable like SwiftUI.Image, you must use this modifier or the view will use the image bitmap size
        .indicator(.activity) // Activity Indicator
        .transition(.fade) // Fade Transition
        .scaledToFit() // Attention to call it on AnimatedImage, but not `some View` after View Modifier (Swift Protocol Extension method is static dispatched)
        
        // Supports SwiftUI ViewBuilder placeholder as well
        AnimatedImage(url: url) {
            Circle().foregroundColor(.gray)
        }
        
        // Data
        AnimatedImage(data: try! Data(contentsOf: URL(fileURLWithPath: "/tmp/foo.webp")))
        .customLoopCount(1) // Custom loop count
        .playbackRate(2.0) // Playback speed rate
        
        // Bundle (not Asset Catalog)
        AnimatedImage(name: "animation1.gif", isAnimating: $isAnimating) // Animation control binding
        .maxBufferSize(.max)
        .onViewUpdate { view, context in // Advanced native view coordinate
            // AppKit tooltip for mouse hover
            view.toolTip = "Mouseover Tip"
            // UIKit advanced content mode
            view.contentMode = .topLeft
            // Coordinator, used for Cocoa Binding or Delegate method
            let coordinator = context.coordinator
        }
    }
}

安装

SDWebImageSwiftUI可以通过CocoaPods、Carthage和Swift Package Manager安装。

CocoaPods

在Podfile中添加以下行:

pod 'SDWebImageSwiftUI'

Swift Package Manager

在Package.swift中添加以下依赖:

.package(url: "https://github.com/SDWebImage/SDWebImageSwiftUI.git", from: "3.0.0")

Carthage

在Cartfile中添加以下行:

github "SDWebImage/SDWebImageSwiftUI"

项目地址

项目的GitHub地址为:SDWebImage/SDWebImageSwiftUI

或许喜欢

RemoteImage:支持自定义URLSession、缓存和动画的SwiftUI图片加载库

RemoteImage是一个SwiftUI的AsyncImage替代品,支持自定义URLSession、缓存和动画效果,提供简单易用的API,适用于iOS和macOS平台。

最近更新 2024-12-10

SwiftUI-ShimmeringView:优雅简单的闪烁加载视图

SwiftUI-ShimmeringView是一个用于iOS、macOS、watchOS和tvOS的SwiftUI库,提供优雅的闪烁效果视图替代传统的加载指示器。

最近更新 2024-12-14

SVGImageSwiftUI:SwiftUI中加载SVG图像的封装库

SVGImageSwiftUI是一个为SwiftUI设计的库,用于通过URL加载SVG图像,支持NSCache缓存和VisionOS,简化SVG图像的使用。

最近更新 2024-12-10

热榜

Made with in Shangrao,China By 老雷

Copyright © devler.cn 1987 - Present

赣ICP备19009883号-1