Merge pull request #285 from SDWebImage/feature/export_animated_image_view_type
Update the AnimatedImage API to expose the SDAnimatedImageView
This commit is contained in:
commit
4012a65e79
|
@ -14,7 +14,7 @@ permissions:
|
|||
jobs:
|
||||
Pods:
|
||||
name: Cocoapods Lint
|
||||
runs-on: macos-12
|
||||
runs-on: macos-13
|
||||
env:
|
||||
DEVELOPER_DIR: /Applications/Xcode_14.1.app
|
||||
steps:
|
||||
|
@ -34,7 +34,7 @@ jobs:
|
|||
|
||||
Demo:
|
||||
name: Run Demo
|
||||
runs-on: macos-12
|
||||
runs-on: macos-13
|
||||
env:
|
||||
DEVELOPER_DIR: /Applications/Xcode_14.1.app
|
||||
WORKSPACE_NAME: SDWebImageSwiftUI.xcworkspace
|
||||
|
@ -44,11 +44,11 @@ jobs:
|
|||
WATCHSCHEME: SDWebImageSwiftUIDemo-watchOS WatchKit App
|
||||
strategy:
|
||||
matrix:
|
||||
iosDestination: ["name=iPhone 13 Pro"]
|
||||
tvOSDestination: ["name=Apple TV"]
|
||||
iosDestination: ["platform=iOS Simulator,name=iPhone 14 Pro"]
|
||||
tvOSDestination: ["platform=tvOS Simulator,name=Apple TV"]
|
||||
watchOSDestination: ["platform=watchOS Simulator,name=Apple Watch Series 7 (45mm)"]
|
||||
macOSDestination: ["platform=macOS"]
|
||||
macCatalystDestination: ["platform=macOS,arch=x86_64,variant=Mac Catalyst"]
|
||||
macCatalystDestination: ["platform=macOS,variant=Mac Catalyst"]
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
|
@ -92,7 +92,7 @@ jobs:
|
|||
|
||||
Test:
|
||||
name: Unit Test
|
||||
runs-on: macos-12
|
||||
runs-on: macos-13
|
||||
env:
|
||||
DEVELOPER_DIR: /Applications/Xcode_14.1.app
|
||||
WORKSPACE_NAME: SDWebImageSwiftUI.xcworkspace
|
||||
|
@ -101,9 +101,9 @@ jobs:
|
|||
TVSCHEME: SDWebImageSwiftUITests tvOS
|
||||
strategy:
|
||||
matrix:
|
||||
iosDestination: ["platform=iOS Simulator,name=iPhone 13 Pro"]
|
||||
macOSDestination: ["platform=macOS,arch=x86_64"]
|
||||
tvOSDestination: ["platform=tvOS Simulator,name=Apple TV 4K"]
|
||||
iosDestination: ["platform=iOS Simulator,name=iPhone 14 Pro"]
|
||||
macOSDestination: ["platform=macOS"]
|
||||
tvOSDestination: ["platform=tvOS Simulator,name=Apple TV"]
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
|
@ -134,7 +134,7 @@ jobs:
|
|||
- name: Test - ${{ matrix.macOSDestination }}
|
||||
run: |
|
||||
set -o pipefail
|
||||
xcodebuild test -workspace "${{ env.WORKSPACE_NAME }}" -scheme "${{ env.OSXSCHEME }}" -destination "${{ matrix.macOSDestination }}" -configuration Debug CODE_SIGNING_ALLOWED=NO | xcpretty -c
|
||||
xcodebuild test -workspace "${{ env.WORKSPACE_NAME }}" -scheme "${{ env.OSXSCHEME }}" -destination "${{ matrix.macOSDestination }}" -configuration Debug CODE_SIGNING_ALLOWED=NO
|
||||
mv ~/Library/Developer/Xcode/DerivedData/ ./DerivedData/macOS
|
||||
|
||||
- name: Test - ${{ matrix.tvOSDestination }}
|
||||
|
@ -154,7 +154,7 @@ jobs:
|
|||
|
||||
Build:
|
||||
name: Build Library
|
||||
runs-on: macos-12
|
||||
runs-on: macos-13
|
||||
env:
|
||||
DEVELOPER_DIR: /Applications/Xcode_14.1.app
|
||||
PROJECT_NAME: SDWebImageSwiftUI.xcodeproj
|
||||
|
|
|
@ -41,18 +41,13 @@
|
|||
32ABE4F32AA3759900331406 /* SDWebImageWebPCoder in Frameworks */ = {isa = PBXBuildFile; productRef = 32ABE4F22AA3759900331406 /* SDWebImageWebPCoder */; };
|
||||
32ABE4F52AA3759900331406 /* SDWebImageSVGCoder in Frameworks */ = {isa = PBXBuildFile; productRef = 32ABE4F42AA3759900331406 /* SDWebImageSVGCoder */; };
|
||||
32ABE4F72AA3759900331406 /* SDWebImagePDFCoder in Frameworks */ = {isa = PBXBuildFile; productRef = 32ABE4F62AA3759900331406 /* SDWebImagePDFCoder */; };
|
||||
32ABE4F92AA375A500331406 /* SDWebImage in Frameworks */ = {isa = PBXBuildFile; productRef = 32ABE4F82AA375A500331406 /* SDWebImage */; };
|
||||
32ABE4FD2AA375A500331406 /* SDWebImageWebPCoder in Frameworks */ = {isa = PBXBuildFile; productRef = 32ABE4FC2AA375A500331406 /* SDWebImageWebPCoder */; };
|
||||
32ABE4FF2AA375A500331406 /* SDWebImageSVGCoder in Frameworks */ = {isa = PBXBuildFile; productRef = 32ABE4FE2AA375A500331406 /* SDWebImageSVGCoder */; };
|
||||
32ABE5012AA375A500331406 /* SDWebImagePDFCoder in Frameworks */ = {isa = PBXBuildFile; productRef = 32ABE5002AA375A500331406 /* SDWebImagePDFCoder */; };
|
||||
32ABE5032AA375B400331406 /* SDWebImageSwiftUI in Frameworks */ = {isa = PBXBuildFile; productRef = 32ABE5022AA375B400331406 /* SDWebImageSwiftUI */; };
|
||||
32B13E812AA368B700BE9B5B /* SDWebImageSwiftUI in Frameworks */ = {isa = PBXBuildFile; productRef = 32B13E802AA368B700BE9B5B /* SDWebImageSwiftUI */; };
|
||||
32B13E832AA368B900BE9B5B /* SDWebImage in Frameworks */ = {isa = PBXBuildFile; productRef = 32B13E822AA368B900BE9B5B /* SDWebImage */; };
|
||||
32B13E852AA368C600BE9B5B /* SDWebImageSwiftUI in Frameworks */ = {isa = PBXBuildFile; productRef = 32B13E842AA368C600BE9B5B /* SDWebImageSwiftUI */; };
|
||||
32B13E872AA368C900BE9B5B /* SDWebImage in Frameworks */ = {isa = PBXBuildFile; productRef = 32B13E862AA368C900BE9B5B /* SDWebImage */; };
|
||||
32B13E892AA368CC00BE9B5B /* SDWebImage in Frameworks */ = {isa = PBXBuildFile; productRef = 32B13E882AA368CC00BE9B5B /* SDWebImage */; };
|
||||
32B13E8F2AA368E100BE9B5B /* SDWebImageSwiftUI in Frameworks */ = {isa = PBXBuildFile; productRef = 32B13E8E2AA368E100BE9B5B /* SDWebImageSwiftUI */; };
|
||||
32B13E912AA368E300BE9B5B /* SDWebImage in Frameworks */ = {isa = PBXBuildFile; productRef = 32B13E902AA368E300BE9B5B /* SDWebImage */; };
|
||||
32D5D1672A445B260098BDFC /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32D5D1662A445B260098BDFC /* AppDelegate.swift */; };
|
||||
32D5D16B2A445B260098BDFC /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 32D5D16A2A445B260098BDFC /* Assets.xcassets */; };
|
||||
32D5D16E2A445B260098BDFC /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 32D5D16D2A445B260098BDFC /* Preview Assets.xcassets */; };
|
||||
|
@ -169,7 +164,6 @@
|
|||
322E0E0228D331F00003A55F /* SDWebImageSwiftUITests macOS.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "SDWebImageSwiftUITests macOS.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
322E0E0F28D332050003A55F /* SDWebImageSwiftUITests tvOS.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "SDWebImageSwiftUITests tvOS.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
326B0D702345C01900D28269 /* DetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetailView.swift; sourceTree = "<group>"; };
|
||||
3294617D2AA36759009E391B /* SDWebImage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = SDWebImage; path = ../../SDWebImage; sourceTree = "<group>"; };
|
||||
3294617E2AA36761009E391B /* SDWebImageSwiftUI */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = SDWebImageSwiftUI; path = ..; sourceTree = "<group>"; };
|
||||
32D5D1602A445B250098BDFC /* SDWebImageSwiftUIDemo-visionOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "SDWebImageSwiftUIDemo-visionOS.app"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
32D5D1662A445B260098BDFC /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; wrapsLines = 0; };
|
||||
|
@ -209,7 +203,6 @@
|
|||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
32B13E892AA368CC00BE9B5B /* SDWebImage in Frameworks */,
|
||||
32D5D1762A445C8F0098BDFC /* SDWebImageSwiftUI in Frameworks */,
|
||||
32ABE4D92AA3753300331406 /* SDWebImageWebPCoder in Frameworks */,
|
||||
32ABE4DF2AA3756A00331406 /* SDWebImagePDFCoder in Frameworks */,
|
||||
|
@ -245,7 +238,6 @@
|
|||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
32B13E832AA368B900BE9B5B /* SDWebImage in Frameworks */,
|
||||
32B13E812AA368B700BE9B5B /* SDWebImageSwiftUI in Frameworks */,
|
||||
32ABE4F32AA3759900331406 /* SDWebImageWebPCoder in Frameworks */,
|
||||
32ABE4F72AA3759900331406 /* SDWebImagePDFCoder in Frameworks */,
|
||||
|
@ -257,7 +249,6 @@
|
|||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
32B13E872AA368C900BE9B5B /* SDWebImage in Frameworks */,
|
||||
32B13E852AA368C600BE9B5B /* SDWebImageSwiftUI in Frameworks */,
|
||||
32ABE4E12AA3757B00331406 /* SDWebImageWebPCoder in Frameworks */,
|
||||
32ABE4E52AA3757B00331406 /* SDWebImagePDFCoder in Frameworks */,
|
||||
|
@ -269,7 +260,6 @@
|
|||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
32B13E912AA368E300BE9B5B /* SDWebImage in Frameworks */,
|
||||
32B13E8F2AA368E100BE9B5B /* SDWebImageSwiftUI in Frameworks */,
|
||||
32ABE4E72AA3758400331406 /* SDWebImageWebPCoder in Frameworks */,
|
||||
32ABE4EB2AA3758400331406 /* SDWebImagePDFCoder in Frameworks */,
|
||||
|
@ -282,7 +272,6 @@
|
|||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
32ABE5032AA375B400331406 /* SDWebImageSwiftUI in Frameworks */,
|
||||
32ABE4F92AA375A500331406 /* SDWebImage in Frameworks */,
|
||||
32ABE4FD2AA375A500331406 /* SDWebImageWebPCoder in Frameworks */,
|
||||
32ABE5012AA375A500331406 /* SDWebImagePDFCoder in Frameworks */,
|
||||
32ABE4FF2AA375A500331406 /* SDWebImageSVGCoder in Frameworks */,
|
||||
|
@ -443,7 +432,6 @@
|
|||
607FACC71AFB9204008FA782 = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
3294617D2AA36759009E391B /* SDWebImage */,
|
||||
3294617E2AA36761009E391B /* SDWebImageSwiftUI */,
|
||||
607FACF51AFB993E008FA782 /* Podspec Metadata */,
|
||||
320CDC2A22FADB44007CF858 /* SDWebImageSwiftUIDemo */,
|
||||
|
@ -503,7 +491,6 @@
|
|||
name = SDWebImageSwiftUIDemo;
|
||||
packageProductDependencies = (
|
||||
32D5D1752A445C8F0098BDFC /* SDWebImageSwiftUI */,
|
||||
32B13E882AA368CC00BE9B5B /* SDWebImage */,
|
||||
32ABE4D82AA3753300331406 /* SDWebImageWebPCoder */,
|
||||
32ABE4DB2AA3755D00331406 /* SDWebImageSVGCoder */,
|
||||
32ABE4DE2AA3756A00331406 /* SDWebImagePDFCoder */,
|
||||
|
@ -593,7 +580,6 @@
|
|||
name = "SDWebImageSwiftUIDemo-visionOS";
|
||||
packageProductDependencies = (
|
||||
32B13E802AA368B700BE9B5B /* SDWebImageSwiftUI */,
|
||||
32B13E822AA368B900BE9B5B /* SDWebImage */,
|
||||
32ABE4F22AA3759900331406 /* SDWebImageWebPCoder */,
|
||||
32ABE4F42AA3759900331406 /* SDWebImageSVGCoder */,
|
||||
32ABE4F62AA3759900331406 /* SDWebImagePDFCoder */,
|
||||
|
@ -617,7 +603,6 @@
|
|||
name = "SDWebImageSwiftUIDemo-macOS";
|
||||
packageProductDependencies = (
|
||||
32B13E842AA368C600BE9B5B /* SDWebImageSwiftUI */,
|
||||
32B13E862AA368C900BE9B5B /* SDWebImage */,
|
||||
32ABE4E02AA3757B00331406 /* SDWebImageWebPCoder */,
|
||||
32ABE4E22AA3757B00331406 /* SDWebImageSVGCoder */,
|
||||
32ABE4E42AA3757B00331406 /* SDWebImagePDFCoder */,
|
||||
|
@ -641,7 +626,6 @@
|
|||
name = "SDWebImageSwiftUIDemo-tvOS";
|
||||
packageProductDependencies = (
|
||||
32B13E8E2AA368E100BE9B5B /* SDWebImageSwiftUI */,
|
||||
32B13E902AA368E300BE9B5B /* SDWebImage */,
|
||||
32ABE4E62AA3758400331406 /* SDWebImageWebPCoder */,
|
||||
32ABE4E82AA3758400331406 /* SDWebImageSVGCoder */,
|
||||
32ABE4EA2AA3758400331406 /* SDWebImagePDFCoder */,
|
||||
|
@ -702,7 +686,6 @@
|
|||
);
|
||||
name = "SDWebImageSwiftUIDemo-watchOS WatchKit Extension";
|
||||
packageProductDependencies = (
|
||||
32ABE4F82AA375A500331406 /* SDWebImage */,
|
||||
32ABE4FC2AA375A500331406 /* SDWebImageWebPCoder */,
|
||||
32ABE4FE2AA375A500331406 /* SDWebImageSVGCoder */,
|
||||
32ABE5002AA375A500331406 /* SDWebImagePDFCoder */,
|
||||
|
@ -2025,10 +2008,6 @@
|
|||
package = 32ABE4DD2AA3756A00331406 /* XCRemoteSwiftPackageReference "SDWebImagePDFCoder" */;
|
||||
productName = SDWebImagePDFCoder;
|
||||
};
|
||||
32ABE4F82AA375A500331406 /* SDWebImage */ = {
|
||||
isa = XCSwiftPackageProductDependency;
|
||||
productName = SDWebImage;
|
||||
};
|
||||
32ABE4FC2AA375A500331406 /* SDWebImageWebPCoder */ = {
|
||||
isa = XCSwiftPackageProductDependency;
|
||||
package = 32ABE4D72AA3753300331406 /* XCRemoteSwiftPackageReference "SDWebImageWebPCoder" */;
|
||||
|
@ -2052,30 +2031,14 @@
|
|||
isa = XCSwiftPackageProductDependency;
|
||||
productName = SDWebImageSwiftUI;
|
||||
};
|
||||
32B13E822AA368B900BE9B5B /* SDWebImage */ = {
|
||||
isa = XCSwiftPackageProductDependency;
|
||||
productName = SDWebImage;
|
||||
};
|
||||
32B13E842AA368C600BE9B5B /* SDWebImageSwiftUI */ = {
|
||||
isa = XCSwiftPackageProductDependency;
|
||||
productName = SDWebImageSwiftUI;
|
||||
};
|
||||
32B13E862AA368C900BE9B5B /* SDWebImage */ = {
|
||||
isa = XCSwiftPackageProductDependency;
|
||||
productName = SDWebImage;
|
||||
};
|
||||
32B13E882AA368CC00BE9B5B /* SDWebImage */ = {
|
||||
isa = XCSwiftPackageProductDependency;
|
||||
productName = SDWebImage;
|
||||
};
|
||||
32B13E8E2AA368E100BE9B5B /* SDWebImageSwiftUI */ = {
|
||||
isa = XCSwiftPackageProductDependency;
|
||||
productName = SDWebImageSwiftUI;
|
||||
};
|
||||
32B13E902AA368E300BE9B5B /* SDWebImage */ = {
|
||||
isa = XCSwiftPackageProductDependency;
|
||||
productName = SDWebImage;
|
||||
};
|
||||
32D5D1752A445C8F0098BDFC /* SDWebImageSwiftUI */ = {
|
||||
isa = XCSwiftPackageProductDependency;
|
||||
productName = SDWebImageSwiftUI;
|
||||
|
|
|
@ -66,8 +66,8 @@ final class AnimatedImageHandler: ObservableObject {
|
|||
@Published var failureBlock: ((Error) -> Void)?
|
||||
@Published var progressBlock: ((Int, Int) -> Void)?
|
||||
// Coordinator Handler
|
||||
@Published var viewCreateBlock: ((PlatformView, AnimatedImage.Context) -> Void)?
|
||||
@Published var viewUpdateBlock: ((PlatformView, AnimatedImage.Context) -> Void)?
|
||||
@Published var viewCreateBlock: ((SDAnimatedImageView, AnimatedImage.Context) -> Void)?
|
||||
@Published var viewUpdateBlock: ((SDAnimatedImageView, AnimatedImage.Context) -> Void)?
|
||||
}
|
||||
|
||||
/// Layout Binding Object, supports dynamic @State changes
|
||||
|
@ -109,7 +109,7 @@ public struct AnimatedImage : PlatformViewRepresentable {
|
|||
/// A observed object to pass through the image manager loading status to indicator
|
||||
@ObservedObject var indicatorStatus = IndicatorStatus()
|
||||
|
||||
static var viewDestroyBlock: ((PlatformView, Coordinator) -> Void)?
|
||||
static var viewDestroyBlock: ((SDAnimatedImageView, Coordinator) -> Void)?
|
||||
|
||||
/// A Binding to control the animation. You can bind external logic to control the animation status.
|
||||
/// True to start animation, false to stop animation.
|
||||
|
@ -178,11 +178,7 @@ public struct AnimatedImage : PlatformViewRepresentable {
|
|||
_imageModel = ObservedObject(wrappedValue: imageModel)
|
||||
}
|
||||
|
||||
#if os(macOS)
|
||||
public typealias NSViewType = AnimatedImageViewWrapper
|
||||
#else
|
||||
public typealias UIViewType = AnimatedImageViewWrapper
|
||||
#endif
|
||||
public typealias PlatformViewType = AnimatedImageViewWrapper
|
||||
|
||||
public typealias Coordinator = AnimatedImageCoordinator
|
||||
|
||||
|
@ -770,7 +766,7 @@ extension AnimatedImage {
|
|||
/// Provide the action when view representable create the native view.
|
||||
/// - Parameter action: The action to perform. The first arg is the native view. The seconds arg is the context.
|
||||
/// - Returns: A view that triggers `action` when view representable create the native view.
|
||||
public func onViewCreate(perform action: ((PlatformView, Context) -> Void)? = nil) -> AnimatedImage {
|
||||
public func onViewCreate(perform action: ((SDAnimatedImageView, Context) -> Void)? = nil) -> AnimatedImage {
|
||||
self.imageHandler.viewCreateBlock = action
|
||||
return self
|
||||
}
|
||||
|
@ -778,7 +774,7 @@ extension AnimatedImage {
|
|||
/// Provide the action when view representable update the native view.
|
||||
/// - Parameter action: The action to perform. The first arg is the native view. The seconds arg is the context.
|
||||
/// - Returns: A view that triggers `action` when view representable update the native view.
|
||||
public func onViewUpdate(perform action: ((PlatformView, Context) -> Void)? = nil) -> AnimatedImage {
|
||||
public func onViewUpdate(perform action: ((SDAnimatedImageView, Context) -> Void)? = nil) -> AnimatedImage {
|
||||
self.imageHandler.viewUpdateBlock = action
|
||||
return self
|
||||
}
|
||||
|
@ -786,7 +782,7 @@ extension AnimatedImage {
|
|||
/// Provide the action when view representable destroy the native view
|
||||
/// - Parameter action: The action to perform. The first arg is the native view. The seconds arg is the coordinator (with userInfo).
|
||||
/// - Returns: A view that triggers `action` when view representable destroy the native view.
|
||||
public static func onViewDestroy(perform action: ((PlatformView, Coordinator) -> Void)? = nil) {
|
||||
public static func onViewDestroy(perform action: ((SDAnimatedImageView, Coordinator) -> Void)? = nil) {
|
||||
self.viewDestroyBlock = action
|
||||
}
|
||||
}
|
||||
|
|
|
@ -14,12 +14,13 @@ import SDWebImage
|
|||
/// Use wrapper to solve tne `UIImageView`/`NSImageView` frame size become image size issue (SwiftUI's Bug)
|
||||
@available(iOS 14.0, OSX 11.0, tvOS 14.0, watchOS 7.0, *)
|
||||
public class AnimatedImageViewWrapper : PlatformView {
|
||||
var wrapped = SDAnimatedImageView()
|
||||
/// The wrapped actual image view, using SDWebImage's aniamted image view
|
||||
public var wrapped = SDAnimatedImageView()
|
||||
var interpolationQuality = CGInterpolationQuality.default
|
||||
var shouldAntialias = false
|
||||
var resizable = false
|
||||
|
||||
override public func draw(_ rect: CGRect) {
|
||||
public override func draw(_ rect: CGRect) {
|
||||
#if os(macOS)
|
||||
guard let ctx = NSGraphicsContext.current?.cgContext else {
|
||||
return
|
||||
|
|
Loading…
Reference in New Issue