From b80fda2ed49882f7fba24e6890c0573bac4896c4 Mon Sep 17 00:00:00 2001 From: Pushkar Sharma Date: Thu, 20 Apr 2017 15:30:00 +0530 Subject: [PATCH 01/12] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index bb9f6d5..33479c2 100644 --- a/README.md +++ b/README.md @@ -6,12 +6,13 @@ [![Platform](https://img.shields.io/cocoapods/p/ButtonProgressBar-iOS.svg?style=flat)](http://cocoapods.org/pods/ButtonProgressBar-iOS) GIF Preview -GIF Preview ## Example To run the example project, clone the repo, and run `pod install` from the Example directory first. +GIF Preview + ## Requirements iOS > 7.0 From f0e63c68d59fde7ef34cb075ee50f4f62bebf2b0 Mon Sep 17 00:00:00 2001 From: Pushkar Sharma Date: Thu, 20 Apr 2017 16:05:42 +0530 Subject: [PATCH 02/12] > v1.0.0 with SPM support --- ButtonProgressBar-iOS.podspec | 8 ++++---- ButtonProgressBar-iOS/Assets/.gitkeep | 0 ButtonProgressBar-iOS/Classes/.gitkeep | 0 .../ButtonProgressBar-iOS.xcodeproj/project.pbxproj | 13 +++++++++++-- Package.swift | 5 +++++ .../Classes => Source}/ButtonProgressBar.swift | 2 +- _Pods.xcodeproj | 1 - 7 files changed, 21 insertions(+), 8 deletions(-) delete mode 100644 ButtonProgressBar-iOS/Assets/.gitkeep delete mode 100644 ButtonProgressBar-iOS/Classes/.gitkeep create mode 100644 Package.swift rename {ButtonProgressBar-iOS/Classes => Source}/ButtonProgressBar.swift (99%) delete mode 120000 _Pods.xcodeproj diff --git a/ButtonProgressBar-iOS.podspec b/ButtonProgressBar-iOS.podspec index 4f3f18c..8e922ed 100644 --- a/ButtonProgressBar-iOS.podspec +++ b/ButtonProgressBar-iOS.podspec @@ -8,7 +8,7 @@ Pod::Spec.new do |s| s.name = 'ButtonProgressBar-iOS' - s.version = '0.1.2' + s.version = '1.0.0' s.summary = 'A simple progress bar UIButton subclass.' # This description is used to generate tags and improve search results. @@ -24,13 +24,13 @@ Text enlarge on tap. Animated completion image. DESC s.homepage = 'https://github.com/thePsguy/ButtonProgressBar-iOS' - # s.screenshots = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2' + s.screenshots = 'https://raw.githubusercontent.com/thePsguy/ButtonProgressBar-iOS/master/output_F2Ryon.gif', 'https://raw.githubusercontent.com/thePsguy/ButtonProgressBar-iOS/master/preview.gif' s.license = { :type => 'MIT', :file => 'LICENSE' } s.author = { 'Pushkar Sharma' => 'thePsguy@icloud.com' } s.source = { :git => 'https://github.com/thePsguy/ButtonProgressBar-iOS.git', :tag => s.version.to_s } - # s.social_media_url = 'https://twitter.com/thePsguy' + s.social_media_url = 'https://twitter.com/thePsguy' s.ios.deployment_target = '8.0' - s.source_files = 'ButtonProgressBar-iOS/Classes/**/*' + s.source_files = 'Source/*.swift' end diff --git a/ButtonProgressBar-iOS/Assets/.gitkeep b/ButtonProgressBar-iOS/Assets/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/ButtonProgressBar-iOS/Classes/.gitkeep b/ButtonProgressBar-iOS/Classes/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/Example/ButtonProgressBar-iOS.xcodeproj/project.pbxproj b/Example/ButtonProgressBar-iOS.xcodeproj/project.pbxproj index e4ba7d7..17bf010 100644 --- a/Example/ButtonProgressBar-iOS.xcodeproj/project.pbxproj +++ b/Example/ButtonProgressBar-iOS.xcodeproj/project.pbxproj @@ -217,10 +217,13 @@ TargetAttributes = { 607FACCF1AFB9204008FA782 = { CreatedOnToolsVersion = 6.3.1; + DevelopmentTeam = V6JUB3D3PN; LastSwiftMigration = 0820; + ProvisioningStyle = Automatic; }; 607FACE41AFB9204008FA782 = { CreatedOnToolsVersion = 6.3.1; + DevelopmentTeam = V6JUB3D3PN; LastSwiftMigration = 0820; TestTargetID = 607FACCF1AFB9204008FA782; }; @@ -498,10 +501,12 @@ baseConfigurationReference = 89CA383809FFA3A8C232F51C /* Pods-ButtonProgressBar-iOS_Example.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + DEVELOPMENT_TEAM = V6JUB3D3PN; INFOPLIST_FILE = "ButtonProgressBar-iOS/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; MODULE_NAME = ExampleApp; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.$(PRODUCT_NAME:rfc1034identifier)"; + PRODUCT_BUNDLE_IDENTIFIER = "net.cocoapods.demo.ButtonProgressBar-iOS-Example"; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 3.0; }; @@ -512,10 +517,12 @@ baseConfigurationReference = 037631BC6A9226892B5CFE90 /* Pods-ButtonProgressBar-iOS_Example.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + DEVELOPMENT_TEAM = V6JUB3D3PN; INFOPLIST_FILE = "ButtonProgressBar-iOS/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; MODULE_NAME = ExampleApp; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.$(PRODUCT_NAME:rfc1034identifier)"; + PRODUCT_BUNDLE_IDENTIFIER = "net.cocoapods.demo.ButtonProgressBar-iOS-Example"; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 3.0; }; @@ -525,6 +532,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = BE5984450B18F616883124C8 /* Pods-ButtonProgressBar-iOS_Tests.debug.xcconfig */; buildSettings = { + DEVELOPMENT_TEAM = V6JUB3D3PN; FRAMEWORK_SEARCH_PATHS = ( "$(SDKROOT)/Developer/Library/Frameworks", "$(inherited)", @@ -545,6 +553,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = B1CAFE402C8B22A5A9234201 /* Pods-ButtonProgressBar-iOS_Tests.release.xcconfig */; buildSettings = { + DEVELOPMENT_TEAM = V6JUB3D3PN; FRAMEWORK_SEARCH_PATHS = ( "$(SDKROOT)/Developer/Library/Frameworks", "$(inherited)", diff --git a/Package.swift b/Package.swift new file mode 100644 index 0000000..589b45e --- /dev/null +++ b/Package.swift @@ -0,0 +1,5 @@ +import PackageDescription + +let package = Package( + name: "ButtonProgressBar_iOS" +) diff --git a/ButtonProgressBar-iOS/Classes/ButtonProgressBar.swift b/Source/ButtonProgressBar.swift similarity index 99% rename from ButtonProgressBar-iOS/Classes/ButtonProgressBar.swift rename to Source/ButtonProgressBar.swift index 278e26e..4ded459 100644 --- a/ButtonProgressBar-iOS/Classes/ButtonProgressBar.swift +++ b/Source/ButtonProgressBar.swift @@ -155,7 +155,7 @@ public class ButtonProgressBar: UIButton { self.imageView?.layer.removeAllAnimations() imageView?.layer.transform = CATransform3DMakeScale(0.0, 0.0, 0.0) } else { - var completionAnim = CABasicAnimation() + let completionAnim = CABasicAnimation() completionAnim.keyPath = "transform" completionAnim.fromValue = CATransform3DMakeScale(0.0, 0.0, 0.0) completionAnim.toValue = CATransform3DIdentity diff --git a/_Pods.xcodeproj b/_Pods.xcodeproj deleted file mode 120000 index 3c5a8e7..0000000 --- a/_Pods.xcodeproj +++ /dev/null @@ -1 +0,0 @@ -Example/Pods/Pods.xcodeproj \ No newline at end of file From 12d37fd28d08773c8878205900d93b6d62f56a40 Mon Sep 17 00:00:00 2001 From: Pushkar Sharma Date: Thu, 20 Apr 2017 16:08:01 +0530 Subject: [PATCH 03/12] Included license in source --- Source/ButtonProgressBar.swift | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/Source/ButtonProgressBar.swift b/Source/ButtonProgressBar.swift index 4ded459..ebf5885 100644 --- a/Source/ButtonProgressBar.swift +++ b/Source/ButtonProgressBar.swift @@ -1,10 +1,24 @@ -// -// ButtonProgressBar.swift -// ButtonProgressBar-iOS -// -// Created by Pushkar Sharma on 08/04/2017. -// Copyright © 2017 thePsguy. All rights reserved. -// +/* +Copyright (c) 2017 Pushkar Sharma + +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. +*/ import UIKit From 8703171c814336695faf596ed585758b88f8388a Mon Sep 17 00:00:00 2001 From: Pushkar Sharma Date: Sun, 24 Sep 2017 16:27:08 +0530 Subject: [PATCH 04/12] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 33479c2..34e6990 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,7 @@ [![Version](https://img.shields.io/cocoapods/v/ButtonProgressBar-iOS.svg?style=flat)](http://cocoapods.org/pods/ButtonProgressBar-iOS) [![License](https://img.shields.io/cocoapods/l/ButtonProgressBar-iOS.svg?style=flat)](http://cocoapods.org/pods/ButtonProgressBar-iOS) [![Platform](https://img.shields.io/cocoapods/p/ButtonProgressBar-iOS.svg?style=flat)](http://cocoapods.org/pods/ButtonProgressBar-iOS) +[![Contact](https://img.shields.io/badge/contact-%40thePsguy-3a8fc1.svg)](https://twitter.com/thePsguy) GIF Preview From 2dc4ac36dffaf224174c63d42f7285c9daf87a03 Mon Sep 17 00:00:00 2001 From: Pushkar Sharma Date: Mon, 25 Sep 2017 19:02:38 +0530 Subject: [PATCH 05/12] Simulator Screenshot --- README.md | 1 + SimulatorScreenShot.png | Bin 0 -> 61581 bytes 2 files changed, 1 insertion(+) create mode 100644 SimulatorScreenShot.png diff --git a/README.md b/README.md index 34e6990..caa6003 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,7 @@ To run the example project, clone the repo, and run `pod install` from the Example directory first. GIF Preview +Simulator Screen ## Requirements iOS > 7.0 diff --git a/SimulatorScreenShot.png b/SimulatorScreenShot.png new file mode 100644 index 0000000000000000000000000000000000000000..a6921330cd9ecb1db8e5fb3a171bf9b3efca48d7 GIT binary patch literal 61581 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 literal 0 HcmV?d00001 From f26a93adf583d338692193c88e36fc9cc8ffa36b Mon Sep 17 00:00:00 2001 From: Pushkar Sharma Date: Mon, 25 Sep 2017 19:06:23 +0530 Subject: [PATCH 06/12] Simulator Screenshot --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index caa6003..4f261b1 100644 --- a/README.md +++ b/README.md @@ -12,8 +12,7 @@ To run the example project, clone the repo, and run `pod install` from the Example directory first. -GIF Preview -Simulator Screen +Simulator Screen           GIF Preview ## Requirements iOS > 7.0 From 78e7e4aa493e41cad02f7bdb781f6ca0adee252f Mon Sep 17 00:00:00 2001 From: Pushkar Sharma Date: Thu, 28 Sep 2017 18:41:58 +0530 Subject: [PATCH 07/12] Update README.md Added appetize.io preview link --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 4f261b1..737b554 100644 --- a/README.md +++ b/README.md @@ -10,9 +10,11 @@ ## Example -To run the example project, clone the repo, and run `pod install` from the Example directory first. +* To test it in your browser itself, [click here](https://appetize.io/app/rcb15cyg78agt90pqa3xujx3cc). -Simulator Screen           GIF Preview +* To run the example project, clone the repo, and run `pod install` from the Example directory first. + +Simulator Screen           GIF Preview ## Requirements iOS > 7.0 From d2950ee51bad4022634f3674ff2737cb94dd5d4d Mon Sep 17 00:00:00 2001 From: Pushkar Sharma Date: Mon, 12 Feb 2018 12:42:45 +0530 Subject: [PATCH 08/12] > Updated to Swift 4.0 --- .../project.pbxproj | 35 +++++++++++++------ .../ViewController.swift | 10 +++--- Source/ButtonProgressBar.swift | 2 +- 3 files changed, 31 insertions(+), 16 deletions(-) diff --git a/Example/ButtonProgressBar-iOS.xcodeproj/project.pbxproj b/Example/ButtonProgressBar-iOS.xcodeproj/project.pbxproj index 17bf010..e98b8ce 100644 --- a/Example/ButtonProgressBar-iOS.xcodeproj/project.pbxproj +++ b/Example/ButtonProgressBar-iOS.xcodeproj/project.pbxproj @@ -15,6 +15,7 @@ 607FACE01AFB9204008FA782 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */; }; 607FACEC1AFB9204008FA782 /* Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607FACEB1AFB9204008FA782 /* Tests.swift */; }; DD6EABDC5BD83ECE916983F6 /* Pods_ButtonProgressBar_iOS_Tests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 89FCD7F88F888CDC1653FECD /* Pods_ButtonProgressBar_iOS_Tests.framework */; }; + F7032A3BA75C19B93C804BE6 /* Pods_ButtonProgressBar_iOS_Example.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 117EDF792490C75FC8A1202D /* Pods_ButtonProgressBar_iOS_Example.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -56,6 +57,7 @@ buildActionMask = 2147483647; files = ( 4D7D54FD1E9EB1F500FA7BA3 /* ButtonProgressBar_iOS.framework in Frameworks */, + F7032A3BA75C19B93C804BE6 /* Pods_ButtonProgressBar_iOS_Example.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -218,13 +220,13 @@ 607FACCF1AFB9204008FA782 = { CreatedOnToolsVersion = 6.3.1; DevelopmentTeam = V6JUB3D3PN; - LastSwiftMigration = 0820; + LastSwiftMigration = 0900; ProvisioningStyle = Automatic; }; 607FACE41AFB9204008FA782 = { CreatedOnToolsVersion = 6.3.1; DevelopmentTeam = V6JUB3D3PN; - LastSwiftMigration = 0820; + LastSwiftMigration = 0900; TestTargetID = 607FACCF1AFB9204008FA782; }; }; @@ -290,13 +292,16 @@ files = ( ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); name = "[CP] Check Pods Manifest.lock"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-ButtonProgressBar-iOS_Example-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; 4F452ECD7570C7BCBDC81498 /* [CP] Embed Pods Frameworks */ = { @@ -305,9 +310,12 @@ files = ( ); inputPaths = ( + "${SRCROOT}/Pods/Target Support Files/Pods-ButtonProgressBar-iOS_Example/Pods-ButtonProgressBar-iOS_Example-frameworks.sh", + "${BUILT_PRODUCTS_DIR}/ButtonProgressBar-iOS/ButtonProgressBar_iOS.framework", ); name = "[CP] Embed Pods Frameworks"; outputPaths = ( + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ButtonProgressBar_iOS.framework", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -335,13 +343,16 @@ files = ( ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); name = "[CP] Check Pods Manifest.lock"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-ButtonProgressBar-iOS_Tests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; EB4A715E786F7E826511F6F6 /* [CP] Copy Pods Resources */ = { @@ -506,9 +517,10 @@ INFOPLIST_FILE = "ButtonProgressBar-iOS/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; MODULE_NAME = ExampleApp; - PRODUCT_BUNDLE_IDENTIFIER = "net.cocoapods.demo.ButtonProgressBar-iOS-Example"; + PRODUCT_BUNDLE_IDENTIFIER = "net.thepsguy.demo.ButtonProgressBar-iOS-Example"; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 3.0; + SWIFT_SWIFT3_OBJC_INFERENCE = On; + SWIFT_VERSION = 4.0; }; name = Debug; }; @@ -522,9 +534,10 @@ INFOPLIST_FILE = "ButtonProgressBar-iOS/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; MODULE_NAME = ExampleApp; - PRODUCT_BUNDLE_IDENTIFIER = "net.cocoapods.demo.ButtonProgressBar-iOS-Example"; + PRODUCT_BUNDLE_IDENTIFIER = "net.thepsguy.demo.ButtonProgressBar-iOS-Example"; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 3.0; + SWIFT_SWIFT3_OBJC_INFERENCE = On; + SWIFT_VERSION = 4.0; }; name = Release; }; @@ -545,7 +558,8 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 3.0; + SWIFT_SWIFT3_OBJC_INFERENCE = On; + SWIFT_VERSION = 4.0; }; name = Debug; }; @@ -562,7 +576,8 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 3.0; + SWIFT_SWIFT3_OBJC_INFERENCE = On; + SWIFT_VERSION = 4.0; }; name = Release; }; diff --git a/Example/ButtonProgressBar-iOS/ViewController.swift b/Example/ButtonProgressBar-iOS/ViewController.swift index a5fcca1..6d96345 100644 --- a/Example/ButtonProgressBar-iOS/ViewController.swift +++ b/Example/ButtonProgressBar-iOS/ViewController.swift @@ -51,13 +51,13 @@ class ViewController: UIViewController { timePeriod.textAlignment = .center timePeriod.keyboardType = .numberPad timePeriod.borderStyle = .roundedRect - timePeriod.attributedPlaceholder = NSAttributedString(string: "Time Period", attributes: [NSFontAttributeName: UIFont.systemFont(ofSize: 9)]) + timePeriod.attributedPlaceholder = NSAttributedString(string: "Time Period", attributes: [NSAttributedStringKey.font: UIFont.systemFont(ofSize: 9)]) timePadding = UITextField(frame: CGRect(x: self.view.frame.width / 2 - 36, y: 145, width: 72, height: 18)) timePadding.textAlignment = .center timePadding.keyboardType = .numberPad timePadding.borderStyle = .roundedRect - timePadding.attributedPlaceholder = NSAttributedString(string: "Padding Time", attributes: [NSFontAttributeName: UIFont.systemFont(ofSize: 8)]) + timePadding.attributedPlaceholder = NSAttributedString(string: "Padding Time", attributes: [NSAttributedStringKey.font: UIFont.systemFont(ofSize: 8)]) self.view.addSubview(completionButton) self.view.addSubview(timePadding) @@ -66,11 +66,11 @@ class ViewController: UIViewController { self.view.addSubview(progressButton) } - func progressComplete(sender: AnyObject?) { + @objc func progressComplete(sender: AnyObject?) { progressButton.triggerCompletion() } - func tapped(){ + @objc func tapped(){ let time = Double(timePeriod.text != "" ? timePeriod.text! : "1")! let padding = Double(timePadding.text != "" ? timePadding.text! : "0.5")! picker.selectedRow(inComponent: 0) == 0 ? self.progressButton.startIndeterminate(withTimePeriod: time, andTimePadding: padding) : self.loadDeterminate() @@ -87,7 +87,7 @@ class ViewController: UIViewController { RunLoop.current.add(timer, forMode: .defaultRunLoopMode) } - func animateDeterminate(sender: Timer) { + @objc func animateDeterminate(sender: Timer) { if self.progressButton.progress >= 1.0 { sender.invalidate() } diff --git a/Source/ButtonProgressBar.swift b/Source/ButtonProgressBar.swift index ebf5885..4385eff 100644 --- a/Source/ButtonProgressBar.swift +++ b/Source/ButtonProgressBar.swift @@ -84,7 +84,7 @@ public class ButtonProgressBar: UIButton { RunLoop.current.add(timer!, forMode: .defaultRunLoopMode) } - func animateIndeterminate(sender: Timer) { + @objc func animateIndeterminate(sender: Timer) { let time = sender.timeInterval - (sender.userInfo as! Double) let stroke = CABasicAnimation(keyPath: "strokeEnd") stroke.fromValue = 0.0 From e7d44666417dd69f23141149431350decc7379d6 Mon Sep 17 00:00:00 2001 From: Pushkar Sharma Date: Mon, 12 Feb 2018 12:52:28 +0530 Subject: [PATCH 09/12] > Added storyboard support --- Source/ButtonProgressBar.swift | 33 +++++++++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/Source/ButtonProgressBar.swift b/Source/ButtonProgressBar.swift index 4385eff..438dca5 100644 --- a/Source/ButtonProgressBar.swift +++ b/Source/ButtonProgressBar.swift @@ -67,6 +67,35 @@ public class ButtonProgressBar: UIButton { self.bringSubview(toFront: imageView!) } + required public init?(coder aDecoder: NSCoder) { + super.init(coder: aDecoder) + + layer.cornerRadius = cornerRadius + layer.masksToBounds = true + backgroundColor = UIColor(red: 50/255, green: 100/255, blue: 200/255, alpha: 1.0) + + titleLabel!.textAlignment = .center + titleLabel!.textColor = .white + titleLabel!.font = UIFont.boldSystemFont(ofSize: 0) + + imageView?.contentMode = .center + imageView?.tintColor = .white + self.hideImage(true) + + let rectanglePath = UIBezierPath(rect: CGRect(x: 0, y: 0, width: frame.width, height: frame.height)) + + progressLayer.path = rectanglePath.cgPath + progressLayer.fillColor = UIColor.clear.cgColor + progressLayer.strokeColor = progressColor.cgColor + + progressLayer.strokeEnd = 0.0 + progressLayer.lineWidth = frame.height*2 + + layer.addSublayer(progressLayer) + self.bringSubview(toFront: titleLabel!) + self.bringSubview(toFront: imageView!) + } + /** Used to handle indeterminate loading. - Parameter timePeriod (optional): The total time (animation + padding, default 2.0) that 1 cycle of the loading takes. @@ -113,10 +142,6 @@ public class ButtonProgressBar: UIButton { self.setProgress(progress: 0.0, false) } - required public init?(coder aDecoder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - override public func layoutSubviews() { super.layoutSubviews() titleLabel!.frame = self.bounds From 8a82931e84124894b3f158793331a688ab3161b8 Mon Sep 17 00:00:00 2001 From: Pushkar Sharma Date: Mon, 12 Feb 2018 12:56:21 +0530 Subject: [PATCH 10/12] Version 1.0.1 --- .swift-version | 1 + ButtonProgressBar-iOS.podspec | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 .swift-version diff --git a/.swift-version b/.swift-version new file mode 100644 index 0000000..5186d07 --- /dev/null +++ b/.swift-version @@ -0,0 +1 @@ +4.0 diff --git a/ButtonProgressBar-iOS.podspec b/ButtonProgressBar-iOS.podspec index 8e922ed..b2061ca 100644 --- a/ButtonProgressBar-iOS.podspec +++ b/ButtonProgressBar-iOS.podspec @@ -8,7 +8,7 @@ Pod::Spec.new do |s| s.name = 'ButtonProgressBar-iOS' - s.version = '1.0.0' + s.version = '1.0.1' s.summary = 'A simple progress bar UIButton subclass.' # This description is used to generate tags and improve search results. From 0936f219e8e9f27f3bb0bc770d2aad1fbccaa9ec Mon Sep 17 00:00:00 2001 From: Abdullah Alhaider Date: Sun, 23 Sep 2018 04:08:34 +0300 Subject: [PATCH 11/12] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 737b554..871b616 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ ButtonProgressBar-iOS is available through [CocoaPods](http://cocoapods.org). To it, simply add the following line to your Podfile: ```ruby -pod "ButtonProgressBar-iOS" +pod 'ButtonProgressBar-iOS' ``` ## Usage From a9556f27e30dd5413f730b18fc0c65af79d3554b Mon Sep 17 00:00:00 2001 From: Pushkar Sharma Date: Mon, 1 Oct 2018 14:35:44 -0400 Subject: [PATCH 12/12] Updated Readme with Appetize preview --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index 871b616..0b4e0e7 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,5 @@ # ButtonProgressBar-iOS -[![CI Status](http://img.shields.io/travis/thePsguy/ButtonProgressBar-iOS.svg?style=flat)](https://travis-ci.org/thePsguy/ButtonProgressBar-iOS) [![Version](https://img.shields.io/cocoapods/v/ButtonProgressBar-iOS.svg?style=flat)](http://cocoapods.org/pods/ButtonProgressBar-iOS) [![License](https://img.shields.io/cocoapods/l/ButtonProgressBar-iOS.svg?style=flat)](http://cocoapods.org/pods/ButtonProgressBar-iOS) [![Platform](https://img.shields.io/cocoapods/p/ButtonProgressBar-iOS.svg?style=flat)](http://cocoapods.org/pods/ButtonProgressBar-iOS) @@ -10,7 +9,7 @@ ## Example -* To test it in your browser itself, [click here](https://appetize.io/app/rcb15cyg78agt90pqa3xujx3cc). +* For LIVE PREVIEW on Appetize in your browser itself, [click here](https://appetize.io/app/rcb15cyg78agt90pqa3xujx3cc). * To run the example project, clone the repo, and run `pod install` from the Example directory first.