Просмотр исходного кода

Merge pull request #1647 from danielebogo/danieleb/image-frame-count

Add imageFrameCount
Wei Wang 5 лет назад
Родитель
Сommit
86fbc612ad
2 измененных файлов с 11 добавлено и 4 удалено
  1. 8 0
      Sources/Image/Image.swift
  2. 3 4
      Tests/KingfisherTests/ImageExtensionTests.swift

+ 8 - 0
Sources/Image/Image.swift

@@ -43,6 +43,7 @@ import CoreGraphics
 import ImageIO
 
 private var animatedImageDataKey: Void?
+private var imageFrameCountKey: Void?
 
 // MARK: - Image Properties
 extension KingfisherWrapper where Base: KFCrossPlatformImage {
@@ -51,6 +52,11 @@ extension KingfisherWrapper where Base: KFCrossPlatformImage {
         set { setRetainedAssociatedObject(base, &animatedImageDataKey, newValue) }
     }
     
+    public var imageFrameCount: Int? {
+        get { return getAssociatedObject(base, &imageFrameCountKey) }
+        set { setRetainedAssociatedObject(base, &imageFrameCountKey, newValue) }
+    }
+    
     #if os(macOS)
     var cgImage: CGImage? {
         return base.cgImage(forProposedRect: nil, context: nil, hints: nil)
@@ -291,6 +297,7 @@ extension KingfisherWrapper where Base: KFCrossPlatformImage {
             kf?.duration = animatedImage.duration
         }
         image?.kf.animatedImageData = data
+        image?.kf.imageFrameCount = Int(CGImageSourceGetCount(imageSource))
         return image
         #else
         
@@ -314,6 +321,7 @@ extension KingfisherWrapper where Base: KFCrossPlatformImage {
             kf?.animatedImageData = data
         }
         
+        image?.kf.imageFrameCount = Int(CGImageSourceGetCount(imageSource))
         return image
         #endif
     }

+ 3 - 4
Tests/KingfisherTests/ImageExtensionTests.swift

@@ -54,6 +54,7 @@ class ImageExtensionTests: XCTestCase {
         let options = ImageCreatingOptions()
         let image = KingfisherWrapper<KFCrossPlatformImage>.image(data: testImageJEPGData, options: options)
         XCTAssertNotNil(image)
+        XCTAssertNil(image?.kf.imageFrameCount)
         XCTAssertTrue(image!.renderEqual(to: KFCrossPlatformImage(data: testImageJEPGData)!))
     }
     
@@ -62,8 +63,7 @@ class ImageExtensionTests: XCTestCase {
         let image = KingfisherWrapper<KFCrossPlatformImage>.animatedImage(data: testImageGIFData, options: options)
         XCTAssertNotNil(image)
         #if os(iOS) || os(tvOS)
-        let count = CGImageSourceGetCount(image!.kf.imageSource!)
-        XCTAssertEqual(count, 8)
+        XCTAssertEqual(image!.kf.imageFrameCount!, 8)
         #else
         XCTAssertEqual(image!.kf.images!.count, 8)
         XCTAssertEqual(image!.kf.duration, 0.8, accuracy: 0.001)
@@ -99,8 +99,7 @@ class ImageExtensionTests: XCTestCase {
         let image = KingfisherWrapper<KFCrossPlatformImage>.animatedImage(data: testImageSingleFrameGIFData, options: options)
         XCTAssertNotNil(image)
         #if os(iOS) || os(tvOS)
-        let count = CGImageSourceGetCount(image!.kf.imageSource!)
-        XCTAssertEqual(count, 1)
+        XCTAssertEqual(image!.kf.imageFrameCount!, 1)
         #else
         XCTAssertEqual(image!.kf.images!.count, 1)
         XCTAssertEqual(image!.kf.duration, Double.infinity)