Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion FaveButton.podspec
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
Pod::Spec.new do |s|

s.name = "FaveButton"
s.version = "3.2.1"
s.version = "3.2.2"
s.summary = "Twitter's heart like animated button written in Swift"
s.license = 'MIT'
s.homepage = 'https://github.com/janselv/fave-button'
Expand Down
12 changes: 10 additions & 2 deletions Source/FaveButton.swift
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,11 @@ public typealias DotColors = (first: UIColor, second: UIColor)


public protocol FaveButtonDelegate{
// This callback happens after the animation in the UI finishes (which takes 1 second to complete)
func faveButton(_ faveButton: FaveButton, didSelected selected: Bool)

// The instant callback is fired immediately when the user taps the button
func instantCallback(_ faveButton: FaveButton, didSelected selected: Bool)

func faveButtonDotColors(_ faveButton: FaveButton) -> [DotColors]?
}
Expand All @@ -38,6 +42,7 @@ public protocol FaveButtonDelegate{
// MARK: Default implementation
public extension FaveButtonDelegate{
func faveButtonDotColors(_ faveButton: FaveButton) -> [DotColors]?{ return nil }
func instantCallback(_ faveButton: FaveButton, didSelected selected: Bool) { }
}

open class FaveButton: UIButton {
Expand Down Expand Up @@ -191,15 +196,18 @@ extension FaveButton{
}

@objc func toggle(_ sender: FaveButton){
sender.isSelected = !sender.isSelected
let selected = !sender.isSelected
sender.isSelected = selected

guard case let delegate as FaveButtonDelegate = self.delegate else{
return
}

delegate.instantCallback(sender, didSelected: selected)

let delay = DispatchTime.now() + Double(Int64(Double(NSEC_PER_SEC) * Const.duration)) / Double(NSEC_PER_SEC)
DispatchQueue.main.asyncAfter(deadline: delay){
delegate.faveButton(sender, didSelected: sender.isSelected)
delegate.faveButton(sender, didSelected: selected)
}
}
}
Expand Down