diff --git a/CHANGELOG.md b/CHANGELOG.md
index d9a9bcd0..66c53fda 100644
--- a/CHANGELOG.md
+++ b/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
diff --git a/Demo/Kingfisher-Demo/Info.plist b/Demo/Kingfisher-Demo/Info.plist
index 2b4e6c40..facec464 100644
--- a/Demo/Kingfisher-Demo/Info.plist
+++ b/Demo/Kingfisher-Demo/Info.plist
@@ -15,11 +15,11 @@
CFBundlePackageType
APPL
CFBundleShortVersionString
- 2.5.1
+ 2.6.0
CFBundleSignature
????
CFBundleVersion
- 707
+ 718
LSRequiresIPhoneOS
UILaunchStoryboardName
diff --git a/Demo/Kingfisher-macOS-Demo/Info.plist b/Demo/Kingfisher-macOS-Demo/Info.plist
index db5cbf54..778e9b69 100644
--- a/Demo/Kingfisher-macOS-Demo/Info.plist
+++ b/Demo/Kingfisher-macOS-Demo/Info.plist
@@ -17,11 +17,11 @@
CFBundlePackageType
APPL
CFBundleShortVersionString
- 2.5.1
+ 2.6.0
CFBundleSignature
????
CFBundleVersion
- 707
+ 718
LSMinimumSystemVersion
$(MACOSX_DEPLOYMENT_TARGET)
NSHumanReadableCopyright
diff --git a/Demo/Kingfisher-tvOS-Demo/Info.plist b/Demo/Kingfisher-tvOS-Demo/Info.plist
index 858f8e72..43386835 100644
--- a/Demo/Kingfisher-tvOS-Demo/Info.plist
+++ b/Demo/Kingfisher-tvOS-Demo/Info.plist
@@ -15,11 +15,11 @@
CFBundlePackageType
APPL
CFBundleShortVersionString
- 2.5.1
+ 2.6.0
CFBundleSignature
????
CFBundleVersion
- 707
+ 718
LSRequiresIPhoneOS
UIMainStoryboardFile
diff --git a/Demo/Kingfisher-watchOS-Demo Extension/Info.plist b/Demo/Kingfisher-watchOS-Demo Extension/Info.plist
index c280bf90..d8c6a923 100644
--- a/Demo/Kingfisher-watchOS-Demo Extension/Info.plist
+++ b/Demo/Kingfisher-watchOS-Demo Extension/Info.plist
@@ -17,11 +17,11 @@
CFBundlePackageType
XPC!
CFBundleShortVersionString
- 2.5.1
+ 2.6.0
CFBundleSignature
????
CFBundleVersion
- 707
+ 718
NSExtension
NSExtensionAttributes
diff --git a/Demo/Kingfisher-watchOS-Demo/Info.plist b/Demo/Kingfisher-watchOS-Demo/Info.plist
index 12d9b954..e819bf2d 100644
--- a/Demo/Kingfisher-watchOS-Demo/Info.plist
+++ b/Demo/Kingfisher-watchOS-Demo/Info.plist
@@ -17,11 +17,11 @@
CFBundlePackageType
APPL
CFBundleShortVersionString
- 2.5.1
+ 2.6.0
CFBundleSignature
????
CFBundleVersion
- 707
+ 718
UISupportedInterfaceOrientations
UIInterfaceOrientationPortrait
diff --git a/Kingfisher.podspec b/Kingfisher.podspec
index e7e76347..21d8ce8f 100644
--- a/Kingfisher.podspec
+++ b/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
diff --git a/Sources/Box.swift b/Sources/Box.swift
new file mode 100644
index 00000000..7076add8
--- /dev/null
+++ b/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 {
+ let value: T
+ init(value: T) {
+ self.value = value
+ }
+}
diff --git a/Sources/Indicator.swift b/Sources/Indicator.swift
new file mode 100644
index 00000000..2d05e965
--- /dev/null
+++ b/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
+//
+// 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
+ }
+}
diff --git a/Sources/Info.plist b/Sources/Info.plist
index f4b283eb..804187c0 100644
--- a/Sources/Info.plist
+++ b/Sources/Info.plist
@@ -15,11 +15,11 @@
CFBundlePackageType
FMWK
CFBundleShortVersionString
- 2.5.1
+ 2.6.0
CFBundleSignature
????
CFBundleVersion
- 707
+ 718
NSPrincipalClass
diff --git a/Tests/KingfisherTests-macOS/Info.plist b/Tests/KingfisherTests-macOS/Info.plist
index ae9cbc29..2b7c43f9 100644
--- a/Tests/KingfisherTests-macOS/Info.plist
+++ b/Tests/KingfisherTests-macOS/Info.plist
@@ -15,10 +15,10 @@
CFBundlePackageType
BNDL
CFBundleShortVersionString
- 2.5.1
+ 2.6.0
CFBundleSignature
????
CFBundleVersion
- 707
+ 718
diff --git a/Tests/KingfisherTests-tvOS/Info.plist b/Tests/KingfisherTests-tvOS/Info.plist
index ae9cbc29..2b7c43f9 100644
--- a/Tests/KingfisherTests-tvOS/Info.plist
+++ b/Tests/KingfisherTests-tvOS/Info.plist
@@ -15,10 +15,10 @@
CFBundlePackageType
BNDL
CFBundleShortVersionString
- 2.5.1
+ 2.6.0
CFBundleSignature
????
CFBundleVersion
- 707
+ 718
diff --git a/Tests/KingfisherTests/Info.plist b/Tests/KingfisherTests/Info.plist
index ae9cbc29..2b7c43f9 100644
--- a/Tests/KingfisherTests/Info.plist
+++ b/Tests/KingfisherTests/Info.plist
@@ -15,10 +15,10 @@
CFBundlePackageType
BNDL
CFBundleShortVersionString
- 2.5.1
+ 2.6.0
CFBundleSignature
????
CFBundleVersion
- 707
+ 718
diff --git a/images/loader.gif b/images/loader.gif
new file mode 100644
index 00000000..ed2c01b5
Binary files /dev/null and b/images/loader.gif differ