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
This commit is contained in:
onevcat
2016-09-13 13:11:24 +09:00
14 changed files with 220 additions and 20 deletions

View File

@@ -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

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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
Sources/Box.swift Normal file
View File

@@ -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
Sources/Indicator.swift Normal file
View File

@@ -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
}
}

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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 Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB