Parcourir la source

Merge branch 'master' into swift3

# Conflicts:
#	Demo/Kingfisher-Demo/ViewController.swift
#	Demo/Kingfisher-macOS-Demo/ViewController.swift
#	Kingfisher.xcodeproj/project.pbxproj
#	Sources/ImageView+Kingfisher.swift
#	Sources/NSButton+Kingfisher.swift
#	Tests/KingfisherTests/ImageViewExtensionTests.swift
onevcat il y a 9 ans
Parent
commit
014ed4663e

+ 7 - 0
CHANGELOG.md

@@ -2,6 +2,13 @@
 
 -----
 
+## [2.6.0 - Indicator Customization](https://github.com/onevcat/Kingfisher/releases/tag/2.6.0) (2016-09-12)
+
+#### Add
+* Support for different types of indicators, including gif images. [#425](https://github.com/onevcat/Kingfisher/pull/425)
+
+---
+
 ## [2.5.1 - Prefetcher Trap](https://github.com/onevcat/Kingfisher/releases/tag/2.5.1) (2016-09-06)
 
 #### Fix

+ 2 - 2
Demo/Kingfisher-Demo/Info.plist

@@ -15,11 +15,11 @@
 	<key>CFBundlePackageType</key>
 	<string>APPL</string>
 	<key>CFBundleShortVersionString</key>
-	<string>2.5.1</string>
+	<string>2.6.0</string>
 	<key>CFBundleSignature</key>
 	<string>????</string>
 	<key>CFBundleVersion</key>
-	<string>707</string>
+	<string>718</string>
 	<key>LSRequiresIPhoneOS</key>
 	<true/>
 	<key>UILaunchStoryboardName</key>

+ 2 - 2
Demo/Kingfisher-macOS-Demo/Info.plist

@@ -17,11 +17,11 @@
 	<key>CFBundlePackageType</key>
 	<string>APPL</string>
 	<key>CFBundleShortVersionString</key>
-	<string>2.5.1</string>
+	<string>2.6.0</string>
 	<key>CFBundleSignature</key>
 	<string>????</string>
 	<key>CFBundleVersion</key>
-	<string>707</string>
+	<string>718</string>
 	<key>LSMinimumSystemVersion</key>
 	<string>$(MACOSX_DEPLOYMENT_TARGET)</string>
 	<key>NSHumanReadableCopyright</key>

+ 2 - 2
Demo/Kingfisher-tvOS-Demo/Info.plist

@@ -15,11 +15,11 @@
 	<key>CFBundlePackageType</key>
 	<string>APPL</string>
 	<key>CFBundleShortVersionString</key>
-	<string>2.5.1</string>
+	<string>2.6.0</string>
 	<key>CFBundleSignature</key>
 	<string>????</string>
 	<key>CFBundleVersion</key>
-	<string>707</string>
+	<string>718</string>
 	<key>LSRequiresIPhoneOS</key>
 	<true/>
 	<key>UIMainStoryboardFile</key>

+ 2 - 2
Demo/Kingfisher-watchOS-Demo Extension/Info.plist

@@ -17,11 +17,11 @@
 	<key>CFBundlePackageType</key>
 	<string>XPC!</string>
 	<key>CFBundleShortVersionString</key>
-	<string>2.5.1</string>
+	<string>2.6.0</string>
 	<key>CFBundleSignature</key>
 	<string>????</string>
 	<key>CFBundleVersion</key>
-	<string>707</string>
+	<string>718</string>
 	<key>NSExtension</key>
 	<dict>
 		<key>NSExtensionAttributes</key>

+ 2 - 2
Demo/Kingfisher-watchOS-Demo/Info.plist

@@ -17,11 +17,11 @@
 	<key>CFBundlePackageType</key>
 	<string>APPL</string>
 	<key>CFBundleShortVersionString</key>
-	<string>2.5.1</string>
+	<string>2.6.0</string>
 	<key>CFBundleSignature</key>
 	<string>????</string>
 	<key>CFBundleVersion</key>
-	<string>707</string>
+	<string>718</string>
 	<key>UISupportedInterfaceOrientations</key>
 	<array>
 		<string>UIInterfaceOrientationPortrait</string>

+ 3 - 2
Kingfisher.podspec

@@ -1,7 +1,7 @@
 Pod::Spec.new do |s|
 
   s.name         = "Kingfisher"
-  s.version      = "2.5.1"
+  s.version      = "2.6.0"
   s.summary      = "A lightweight and pure Swift implemented library for downloading and cacheing image from the web."
 
   s.description  = <<-DESC
@@ -36,11 +36,12 @@ Pod::Spec.new do |s|
   s.public_header_files = ["Sources/Kingfisher.h"]
   
   s.osx.exclude_files = ["Sources/AnimatedImageView.swift", "Sources/UIButton+Kingfisher.swift"]
-  s.watchos.exclude_files = ["Sources/AnimatedImageView.swift", "Sources/UIButton+Kingfisher.swift", "Sources/ImageView+Kingfisher.swift", "Sources/NSButton+Kingfisher.swift"]
+  s.watchos.exclude_files = ["Sources/AnimatedImageView.swift", "Sources/UIButton+Kingfisher.swift", "Sources/ImageView+Kingfisher.swift", "Sources/NSButton+Kingfisher.swift", "Sources/Indicator.swift"]
   s.ios.exclude_files = "Sources/NSButton+Kingfisher.swift"
   s.tvos.exclude_files = "Sources/NSButton+Kingfisher.swift"
   
   s.requires_arc = true
   s.framework = "CFNetwork"
 
+  s.pod_target_xcconfig = { 'SWIFT_VERSION' => '2.3' }
 end

+ 16 - 0
Sources/Box.swift

@@ -0,0 +1,16 @@
+//
+//  Box.swift
+//  Kingfisher
+//
+//  Created by WANG WEI on 2016/09/12.
+//  Copyright © 2016年 Wei Wang. All rights reserved.
+//
+
+import Foundation
+
+class Box<T> {
+    let value: T
+    init(value: T) {
+        self.value = value
+    }
+}

+ 176 - 0
Sources/Indicator.swift

@@ -0,0 +1,176 @@
+//
+//  Indicator.swift
+//  Kingfisher
+//
+//  Created by João D. Moreira on 30/08/16.
+//
+//  Copyright (c) 2016 Wei Wang <onevcat@gmail.com>
+//
+//  Permission is hereby granted, free of charge, to any person obtaining a copy
+//  of this software and associated documentation files (the "Software"), to deal
+//  in the Software without restriction, including without limitation the rights
+//  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+//  copies of the Software, and to permit persons to whom the Software is
+//  furnished to do so, subject to the following conditions:
+//
+//  The above copyright notice and this permission notice shall be included in
+//  all copies or substantial portions of the Software.
+//
+//  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+//  THE SOFTWARE.
+
+#if os(OSX)
+    import AppKit
+#else
+    import UIKit
+#endif
+
+#if os(OSX)
+    public typealias IndicatorView = NSView
+#else
+    public typealias IndicatorView = UIView
+#endif
+
+// MARK: - Indicator Protocol
+public protocol Indicator {
+    func startAnimatingView()
+    func stopAnimatingView()
+
+    var viewCenter: CGPoint { get set }
+    var view: IndicatorView { get }
+}
+
+extension Indicator {
+    #if os(OSX)
+    var viewCenter: CGPoint {
+        get {
+            let frame = view.frame
+            return CGPoint(x: frame.origin.x + frame.size.width / 2.0, y: frame.origin.y + frame.size.height / 2.0 )
+        }
+        set {
+            let frame = view.frame
+            let newFrame = CGRect(x: newValue.x - frame.size.width / 2.0,
+                                  y: newValue.y - frame.size.height / 2.0,
+                                  width: frame.size.width,
+                                  height: frame.size.height)
+            view.frame = newFrame
+        }
+    }
+    #else
+    var viewCenter: CGPoint {
+        get {
+            return view.center
+        }
+        set {
+            view.center = newValue
+        }
+    }
+    #endif
+}
+
+// MARK: - ActivityIndicator
+// Displays a NSProgressIndicator / UIActivityIndicatorView
+struct ActivityIndicator: Indicator {
+
+    #if os(OSX)
+    private let activityIndicatorView: NSProgressIndicator
+    #else
+    private let activityIndicatorView: UIActivityIndicatorView
+    #endif
+
+    var view: IndicatorView {
+        return activityIndicatorView
+    }
+
+    func startAnimatingView() {
+        #if os(OSX)
+            activityIndicatorView.startAnimation(nil)
+        #else
+            activityIndicatorView.startAnimating()
+        #endif
+        activityIndicatorView.hidden = false
+    }
+
+    func stopAnimatingView() {
+        #if os(OSX)
+            activityIndicatorView.stopAnimation(nil)
+        #else
+            activityIndicatorView.stopAnimating()
+        #endif
+        activityIndicatorView.hidden = true
+    }
+
+    init() {
+        #if os(OSX)
+            activityIndicatorView = NSProgressIndicator(frame: CGRect(x: 0, y: 0, width: 16, height: 16))
+
+            #if swift(>=2.3)
+                activityIndicatorView.controlSize = .Small
+            #else
+                activityIndicatorView.controlSize = .SmallControlSize
+            #endif
+            activityIndicatorView.style = .SpinningStyle
+        #else
+            #if os(tvOS)
+                let indicatorStyle = UIActivityIndicatorViewStyle.White
+            #else
+                let indicatorStyle = UIActivityIndicatorViewStyle.Gray
+            #endif
+            activityIndicatorView = UIActivityIndicatorView(activityIndicatorStyle:indicatorStyle)
+            activityIndicatorView.autoresizingMask = [.FlexibleLeftMargin, .FlexibleRightMargin, .FlexibleBottomMargin, .FlexibleTopMargin]
+        #endif
+    }
+}
+
+// MARK: - ImageIndicator
+// Displays an ImageView. Supports gif
+struct ImageIndicator: Indicator {
+    private let animatedImageIndicatorView: ImageView
+
+    var view: IndicatorView {
+        return animatedImageIndicatorView
+    }
+
+    init(imageData data: NSData) {
+
+        let image = Image.kf_imageWithData(data, scale: 1.0, preloadAllGIFData: true)
+        animatedImageIndicatorView = ImageView()
+        animatedImageIndicatorView.image = image
+        
+        #if os(OSX)
+            // Need for gif to animate on OSX
+            self.animatedImageIndicatorView.imageScaling = .ScaleNone
+            self.animatedImageIndicatorView.canDrawSubviewsIntoLayer = true
+        #else
+            animatedImageIndicatorView.contentMode = .Center
+            
+            animatedImageIndicatorView.autoresizingMask = [.FlexibleLeftMargin,
+                                                           .FlexibleRightMargin,
+                                                           .FlexibleBottomMargin,
+                                                           .FlexibleTopMargin]
+        #endif
+    }
+
+    func startAnimatingView() {
+        #if os(OSX)
+            animatedImageIndicatorView.animates = true
+        #else
+            animatedImageIndicatorView.startAnimating()
+        #endif
+        animatedImageIndicatorView.hidden = false
+    }
+
+    func stopAnimatingView() {
+        #if os(OSX)
+            animatedImageIndicatorView.animates = false
+        #else
+            animatedImageIndicatorView.stopAnimating()
+        #endif
+        animatedImageIndicatorView.hidden = true
+    }
+}

+ 2 - 2
Sources/Info.plist

@@ -15,11 +15,11 @@
 	<key>CFBundlePackageType</key>
 	<string>FMWK</string>
 	<key>CFBundleShortVersionString</key>
-	<string>2.5.1</string>
+	<string>2.6.0</string>
 	<key>CFBundleSignature</key>
 	<string>????</string>
 	<key>CFBundleVersion</key>
-	<string>707</string>
+	<string>718</string>
 	<key>NSPrincipalClass</key>
 	<string></string>
 </dict>

+ 2 - 2
Tests/KingfisherTests-macOS/Info.plist

@@ -15,10 +15,10 @@
 	<key>CFBundlePackageType</key>
 	<string>BNDL</string>
 	<key>CFBundleShortVersionString</key>
-	<string>2.5.1</string>
+	<string>2.6.0</string>
 	<key>CFBundleSignature</key>
 	<string>????</string>
 	<key>CFBundleVersion</key>
-	<string>707</string>
+	<string>718</string>
 </dict>
 </plist>

+ 2 - 2
Tests/KingfisherTests-tvOS/Info.plist

@@ -15,10 +15,10 @@
 	<key>CFBundlePackageType</key>
 	<string>BNDL</string>
 	<key>CFBundleShortVersionString</key>
-	<string>2.5.1</string>
+	<string>2.6.0</string>
 	<key>CFBundleSignature</key>
 	<string>????</string>
 	<key>CFBundleVersion</key>
-	<string>707</string>
+	<string>718</string>
 </dict>
 </plist>

+ 2 - 2
Tests/KingfisherTests/Info.plist

@@ -15,10 +15,10 @@
 	<key>CFBundlePackageType</key>
 	<string>BNDL</string>
 	<key>CFBundleShortVersionString</key>
-	<string>2.5.1</string>
+	<string>2.6.0</string>
 	<key>CFBundleSignature</key>
 	<string>????</string>
 	<key>CFBundleVersion</key>
-	<string>707</string>
+	<string>718</string>
 </dict>
 </plist>

BIN
images/loader.gif