From 33f362f3f1a3e9a1182da4fbb67264678a2c3927 Mon Sep 17 00:00:00 2001 From: Ilhasoft Mobile Date: Wed, 3 May 2017 11:34:40 -0300 Subject: [PATCH 1/4] Created a callback exactly when the user touches the button and a created a boolean to switch when the button can be clicked or not --- Source/FaveButton.swift | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Source/FaveButton.swift b/Source/FaveButton.swift index b1df2a9..f47ba73 100644 --- a/Source/FaveButton.swift +++ b/Source/FaveButton.swift @@ -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]? } @@ -187,6 +191,8 @@ extension FaveButton{ guard case let delegate as FaveButtonDelegate = self.delegate else{ return } + + delegate.instantCallback(sender, didSelected: sender.isSelected) let delay = DispatchTime.now() + Double(Int64(Double(NSEC_PER_SEC) * Const.duration)) / Double(NSEC_PER_SEC) DispatchQueue.main.asyncAfter(deadline: delay){ From e5114e6ddad6bad69c7c72760725176b7406a1f2 Mon Sep 17 00:00:00 2001 From: Jacob Farkas Date: Fri, 5 Oct 2018 14:24:48 -0700 Subject: [PATCH 2/4] Add a default implementation of instantCallback so that delegates aren't required to implement it --- Source/FaveButton.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/Source/FaveButton.swift b/Source/FaveButton.swift index f47ba73..80b4475 100644 --- a/Source/FaveButton.swift +++ b/Source/FaveButton.swift @@ -42,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 { From 220f845803301d52006f3c534318eee35a3b0b10 Mon Sep 17 00:00:00 2001 From: Jacob Farkas Date: Fri, 5 Oct 2018 14:25:11 -0700 Subject: [PATCH 3/4] Bump the podspec version --- FaveButton.podspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/FaveButton.podspec b/FaveButton.podspec index 63bce42..6d8ce75 100644 --- a/FaveButton.podspec +++ b/FaveButton.podspec @@ -1,7 +1,7 @@ Pod::Spec.new do |s| s.name = "FaveButton" - s.version = "3.0.0" + s.version = "3.0.1" s.summary = "Twitter's heart like animated button written in Swift" s.license = 'MIT' s.homepage = 'https://github.com/xhamr/fave-button' From 3555e0d248115cee26a490a7d248fe7515fc16dc Mon Sep 17 00:00:00 2001 From: Jacob Farkas Date: Fri, 5 Oct 2018 14:30:01 -0700 Subject: [PATCH 4/4] Use a variable to store the selected state --- Source/FaveButton.swift | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Source/FaveButton.swift b/Source/FaveButton.swift index 80b4475..bbe58fd 100644 --- a/Source/FaveButton.swift +++ b/Source/FaveButton.swift @@ -187,17 +187,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: sender.isSelected) + 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) } } }