From 92cbd32517b764739cc02f03e9a196c54bab92aa Mon Sep 17 00:00:00 2001 From: Serhii Butenko Date: Wed, 5 Oct 2016 11:27:03 +0300 Subject: [PATCH] Automigration to swift 3 --- Example/Pods/Pods.xcodeproj/project.pbxproj | 12 + Example/Segmentio.xcodeproj/project.pbxproj | 3 + .../Segmentio/Application/AppDelegate.swift | 6 +- .../Extensions/String+Convenience.swift | 16 +- .../Extensions/UIFont+ExampleFonts.swift | 10 +- .../Extensions/UINavigationBar+Flat.swift | 8 +- .../Helpers/AppearanceConfigurator.swift | 6 +- .../ContentViewController.swift | 26 +- .../EmbedContainerViewController.swift | 28 +-- .../ExampleViewController.swift | 68 +++--- .../ViewControllers/HomeViewController.swift | 20 +- .../SideMenuViewController.swift | 102 ++++---- .../Source/Badge/BadgeViewPresenter.swift | 32 +-- .../Badge/Views/BadgeWithCounterView.swift | 28 +-- Segmentio/Source/Cells/SegmentioCell.swift | 144 +++++------ .../Source/Cells/SegmentioCellWithImage.swift | 24 +- .../SegmentioCellWithImageAfterLabel.swift | 34 +-- .../SegmentioCellWithImageBeforeLabel.swift | 34 +-- .../SegmentioCellWithImageOverLabel.swift | 38 +-- .../SegmentioCellWithImageUnderLabel.swift | 38 +-- .../Source/Cells/SegmentioCellWithLabel.swift | 26 +- .../Source/Extensions/RoundImageView.swift | 4 +- .../Source/Extensions/UIView+Appearance.swift | 28 +-- Segmentio/Source/Segmentio.swift | 228 +++++++++--------- Segmentio/Source/SegmentioOptions.swift | 30 +-- 25 files changed, 504 insertions(+), 489 deletions(-) diff --git a/Example/Pods/Pods.xcodeproj/project.pbxproj b/Example/Pods/Pods.xcodeproj/project.pbxproj index 035c73a..4a7938f 100644 --- a/Example/Pods/Pods.xcodeproj/project.pbxproj +++ b/Example/Pods/Pods.xcodeproj/project.pbxproj @@ -399,6 +399,14 @@ attributes = { LastSwiftUpdateCheck = 0730; LastUpgradeCheck = 0700; + TargetAttributes = { + 1773C65AAC9F8837BB8142660D7320E0 = { + LastSwiftMigration = 0800; + }; + D69CC732EFB91EE42BE73E5030BD387C = { + LastSwiftMigration = 0800; + }; + }; }; buildConfigurationList = 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */; compatibilityVersion = "Xcode 3.2"; @@ -567,6 +575,7 @@ SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 3.0; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; @@ -601,6 +610,7 @@ PRODUCT_NAME = Pods_Segmentio_Example; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_VERSION = 3.0; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; @@ -703,6 +713,7 @@ SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 3.0; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; @@ -732,6 +743,7 @@ PRODUCT_NAME = Segmentio; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_VERSION = 3.0; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; diff --git a/Example/Segmentio.xcodeproj/project.pbxproj b/Example/Segmentio.xcodeproj/project.pbxproj index 75ff0c1..0b4e7ec 100644 --- a/Example/Segmentio.xcodeproj/project.pbxproj +++ b/Example/Segmentio.xcodeproj/project.pbxproj @@ -244,6 +244,7 @@ TargetAttributes = { 607FACCF1AFB9204008FA782 = { CreatedOnToolsVersion = 6.3.1; + LastSwiftMigration = 0800; }; }; }; @@ -450,6 +451,7 @@ PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE = ""; + SWIFT_VERSION = 3.0; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; @@ -472,6 +474,7 @@ PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE = ""; + SWIFT_VERSION = 3.0; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Release; diff --git a/Example/Segmentio/Application/AppDelegate.swift b/Example/Segmentio/Application/AppDelegate.swift index 4fa19b2..fac23b1 100644 --- a/Example/Segmentio/Application/AppDelegate.swift +++ b/Example/Segmentio/Application/AppDelegate.swift @@ -13,10 +13,10 @@ class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? - func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { - UIDevice.currentDevice().beginGeneratingDeviceOrientationNotifications() + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { + UIDevice.current.beginGeneratingDeviceOrientationNotifications() AppearanceConfigurator.configureNavigationBar() return true } -} \ No newline at end of file +} diff --git a/Example/Segmentio/Extensions/String+Convenience.swift b/Example/Segmentio/Extensions/String+Convenience.swift index 8dab58f..ca60593 100644 --- a/Example/Segmentio/Extensions/String+Convenience.swift +++ b/Example/Segmentio/Extensions/String+Convenience.swift @@ -12,16 +12,16 @@ extension String { func stringFromCamelCase() -> String { var string = self - string = string.stringByReplacingOccurrencesOfString( - "([a-z])([A-Z])", - withString: "$1 $2", - options: .RegularExpressionSearch, - range: Range(string.startIndex.. UIFont { - return UIFont(name: "Avenir-Book", size: size) ?? UIFont.systemFontOfSize(size) + class func exampleAvenirMediumWithSize(_ size: CGFloat) -> UIFont { + return UIFont(name: "Avenir-Book", size: size) ?? UIFont.systemFont(ofSize: size) } - class func exampleAvenirLightWithSize(size: CGFloat) -> UIFont { - return UIFont(name: "Avenir-Light", size: size) ?? UIFont.systemFontOfSize(size) + class func exampleAvenirLightWithSize(_ size: CGFloat) -> UIFont { + return UIFont(name: "Avenir-Light", size: size) ?? UIFont.systemFont(ofSize: size) } -} \ No newline at end of file +} diff --git a/Example/Segmentio/Extensions/UINavigationBar+Flat.swift b/Example/Segmentio/Extensions/UINavigationBar+Flat.swift index 4f6ef9d..d484c72 100644 --- a/Example/Segmentio/Extensions/UINavigationBar+Flat.swift +++ b/Example/Segmentio/Extensions/UINavigationBar+Flat.swift @@ -28,15 +28,15 @@ private var flatAssociatedObjectKey: UInt8 = 0 set { if (newValue) { let void = UIImage() - setBackgroundImage(void, forBarPosition: .Any, barMetrics: .Default) + setBackgroundImage(void, for: .any, barMetrics: .default) shadowImage = void } else { - setBackgroundImage(nil, forBarPosition: .Any, barMetrics: .Default) + setBackgroundImage(nil, for: .any, barMetrics: .default) shadowImage = nil } - objc_setAssociatedObject(self, &flatAssociatedObjectKey, NSNumber(bool: newValue), + objc_setAssociatedObject(self, &flatAssociatedObjectKey, NSNumber(value: newValue as Bool), objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC) } } -} \ No newline at end of file +} diff --git a/Example/Segmentio/Helpers/AppearanceConfigurator.swift b/Example/Segmentio/Helpers/AppearanceConfigurator.swift index 9ea569c..b8c6ce1 100644 --- a/Example/Segmentio/Helpers/AppearanceConfigurator.swift +++ b/Example/Segmentio/Helpers/AppearanceConfigurator.swift @@ -11,10 +11,10 @@ import UIKit class AppearanceConfigurator { class func configureNavigationBar() { - UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent + UIApplication.shared.statusBarStyle = UIStatusBarStyle.lightContent UINavigationBar.appearance().barTintColor = ColorPalette.WhiteColor - UINavigationBar.appearance().translucent = false + UINavigationBar.appearance().isTranslucent = false UINavigationBar.appearance().tintColor = ColorPalette.BlackColor let attributes = [ NSFontAttributeName : UIFont.exampleAvenirMediumWithSize(17), @@ -23,4 +23,4 @@ class AppearanceConfigurator { UINavigationBar.appearance().titleTextAttributes = attributes } -} \ No newline at end of file +} diff --git a/Example/Segmentio/ViewControllers/ContentViewController.swift b/Example/Segmentio/ViewControllers/ContentViewController.swift index acf5e77..62326ef 100644 --- a/Example/Segmentio/ViewControllers/ContentViewController.swift +++ b/Example/Segmentio/ViewControllers/ContentViewController.swift @@ -9,29 +9,29 @@ import UIKit private func yal_isPhone6() -> Bool { - let size = UIScreen.mainScreen().bounds.size + let size = UIScreen.main.bounds.size let minSide = min(size.height, size.width) let maxSide = max(size.height, size.width) return (fabs(minSide - 375.0) < 0.01) && (fabs(maxSide - 667.0) < 0.01) } class ExampleTableViewCell: UITableViewCell { - @IBOutlet private weak var hintLabel: UILabel! + @IBOutlet fileprivate weak var hintLabel: UILabel! } class ContentViewController: UIViewController { - @IBOutlet private weak var cardNameLabel: UILabel! - @IBOutlet private weak var hintTableView: UITableView! - @IBOutlet private weak var bottomCardConstraint: NSLayoutConstraint! - @IBOutlet private weak var heightConstraint: NSLayoutConstraint! + @IBOutlet fileprivate weak var cardNameLabel: UILabel! + @IBOutlet fileprivate weak var hintTableView: UITableView! + @IBOutlet fileprivate weak var bottomCardConstraint: NSLayoutConstraint! + @IBOutlet fileprivate weak var heightConstraint: NSLayoutConstraint! var disaster: Disaster? - private var hints: [String]? + fileprivate var hints: [String]? class func create() -> ContentViewController { let mainStoryboard = UIStoryboard(name: "Main", bundle: nil) - return mainStoryboard.instantiateViewControllerWithIdentifier(String(self)) as! ContentViewController + return mainStoryboard.instantiateViewController(withIdentifier: String(describing: self)) as! ContentViewController } // MARK: - Lifecycle @@ -60,14 +60,14 @@ class ContentViewController: UIViewController { extension ContentViewController: UITableViewDataSource { - func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return hints?.count ?? 0 } - func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { - let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! ExampleTableViewCell - cell.hintLabel?.text = hints?[indexPath.row] + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! ExampleTableViewCell + cell.hintLabel?.text = hints?[(indexPath as NSIndexPath).row] return cell } -} \ No newline at end of file +} diff --git a/Example/Segmentio/ViewControllers/EmbedContainerViewController.swift b/Example/Segmentio/ViewControllers/EmbedContainerViewController.swift index 1f474f7..9d3b43f 100644 --- a/Example/Segmentio/ViewControllers/EmbedContainerViewController.swift +++ b/Example/Segmentio/ViewControllers/EmbedContainerViewController.swift @@ -9,13 +9,13 @@ import UIKit import Segmentio -private let animateDuration: NSTimeInterval = 0.6 +private let animateDuration: TimeInterval = 0.6 class EmbedContainerViewController: UIViewController { var style = SegmentioStyle.OnlyImage - private var currentViewController: UIViewController? + fileprivate var currentViewController: UIViewController? // MARK: - Lifecycle @@ -26,7 +26,7 @@ class EmbedContainerViewController: UIViewController { // MARK: - Private functions - private func presentController(controller: UIViewController) { + fileprivate func presentController(_ controller: UIViewController) { if let _ = currentViewController { removeCurrentViewController() } @@ -34,29 +34,29 @@ class EmbedContainerViewController: UIViewController { addChildViewController(controller) view.addSubview(controller.view) currentViewController = controller - controller.didMoveToParentViewController(self) + controller.didMove(toParentViewController: self) } - private func controller(style: SegmentioStyle) -> ExampleViewController { + fileprivate func controller(_ style: SegmentioStyle) -> ExampleViewController { let controller = ExampleViewController.create() controller.segmentioStyle = style controller.view.frame = view.bounds return controller } - private func removeCurrentViewController() { - currentViewController?.willMoveToParentViewController(nil) + fileprivate func removeCurrentViewController() { + currentViewController?.willMove(toParentViewController: nil) currentViewController?.view.removeFromSuperview() currentViewController?.removeFromParentViewController() } - private func swapCurrentController(controller: UIViewController) { - currentViewController?.willMoveToParentViewController(nil) + fileprivate func swapCurrentController(_ controller: UIViewController) { + currentViewController?.willMove(toParentViewController: nil) addChildViewController(controller) view.addSubview(controller.view) - UIView.animateWithDuration( - animateDuration, + UIView.animate( + withDuration: animateDuration, animations: { controller.view.alpha = 1 self.currentViewController?.view.alpha = 0 @@ -65,15 +65,15 @@ class EmbedContainerViewController: UIViewController { self.currentViewController?.view.removeFromSuperview() self.currentViewController?.removeFromParentViewController() self.currentViewController = controller - self.currentViewController?.didMoveToParentViewController(self) + self.currentViewController?.didMove(toParentViewController: self) } ) } // MARK: - Public functions - func swapViewControllers(style: SegmentioStyle) { + func swapViewControllers(_ style: SegmentioStyle) { swapCurrentController(controller(style)) } -} \ No newline at end of file +} diff --git a/Example/Segmentio/ViewControllers/ExampleViewController.swift b/Example/Segmentio/ViewControllers/ExampleViewController.swift index d4998f3..99085f3 100644 --- a/Example/Segmentio/ViewControllers/ExampleViewController.swift +++ b/Example/Segmentio/ViewControllers/ExampleViewController.swift @@ -13,12 +13,12 @@ class ExampleViewController: UIViewController { var segmentioStyle = SegmentioStyle.ImageOverLabel - @IBOutlet private weak var segmentViewHeightConstraint: NSLayoutConstraint! - @IBOutlet private weak var segmentioView: Segmentio! - @IBOutlet private weak var containerView: UIView! - @IBOutlet private weak var scrollView: UIScrollView! + @IBOutlet fileprivate weak var segmentViewHeightConstraint: NSLayoutConstraint! + @IBOutlet fileprivate weak var segmentioView: Segmentio! + @IBOutlet fileprivate weak var containerView: UIView! + @IBOutlet fileprivate weak var scrollView: UIScrollView! - private lazy var viewControllers: [UIViewController] = { + fileprivate lazy var viewControllers: [UIViewController] = { return self.preparedViewControllers() }() @@ -26,7 +26,7 @@ class ExampleViewController: UIViewController { class func create() -> ExampleViewController { let board = UIStoryboard(name: "Main", bundle: nil) - return board.instantiateViewControllerWithIdentifier(String(self)) as! ExampleViewController + return board.instantiateViewController(withIdentifier: String(describing: self)) as! ExampleViewController } // MARK: - Lifecycle @@ -44,14 +44,14 @@ class ExampleViewController: UIViewController { } } - override func viewDidAppear(animated: Bool) { + override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) setupSegmentioView() setupScrollView() setupBadgeCountForIndex(1) } - private func setupSegmentioView() { + fileprivate func setupSegmentioView() { segmentioView.setup( content: segmentioContent(), style: segmentioStyle, @@ -71,7 +71,7 @@ class ExampleViewController: UIViewController { } } - private func setupBadgeCountForIndex(index: Int) { + fileprivate func setupBadgeCountForIndex(_ index: Int) { segmentioView.setupBadgeAtIndex( index, count: 10, @@ -79,7 +79,7 @@ class ExampleViewController: UIViewController { ) } - private func segmentioContent() -> [SegmentioItem] { + fileprivate func segmentioContent() -> [SegmentioItem] { return [ SegmentioItem(title: "Tornado", image: UIImage(named: "tornado")), SegmentioItem(title: "Earthquakes", image: UIImage(named: "earthquakes")), @@ -90,11 +90,11 @@ class ExampleViewController: UIViewController { ] } - private func segmentioOptions() -> SegmentioOptions { - var imageContentMode = UIViewContentMode.Center + fileprivate func segmentioOptions() -> SegmentioOptions { + var imageContentMode = UIViewContentMode.center switch segmentioStyle { case .ImageBeforeLabel, .ImageAfterLabel: - imageContentMode = .ScaleAspectFit + imageContentMode = .scaleAspectFit default: break } @@ -107,21 +107,21 @@ class ExampleViewController: UIViewController { horizontalSeparatorOptions: segmentioHorizontalSeparatorOptions(), verticalSeparatorOptions: segmentioVerticalSeparatorOptions(), imageContentMode: imageContentMode, - labelTextAlignment: .Center, + labelTextAlignment: .center, segmentStates: segmentioStates() ) } - private func segmentioStates() -> SegmentioStates { + fileprivate func segmentioStates() -> SegmentioStates { let font = UIFont.exampleAvenirMediumWithSize(13) return SegmentioStates( defaultState: segmentioState( - backgroundColor: UIColor.clearColor(), + backgroundColor: UIColor.clear, titleFont: font, titleTextColor: ColorPalette.GrayChateauColor ), selectedState: segmentioState( - backgroundColor: UIColor.clearColor(), + backgroundColor: UIColor.clear, titleFont: font, titleTextColor: ColorPalette.BlackColor ), @@ -133,28 +133,28 @@ class ExampleViewController: UIViewController { ) } - private func segmentioState(backgroundColor backgroundColor: UIColor, titleFont: UIFont, titleTextColor: UIColor) -> SegmentioState { + fileprivate func segmentioState(backgroundColor: UIColor, titleFont: UIFont, titleTextColor: UIColor) -> SegmentioState { return SegmentioState(backgroundColor: backgroundColor, titleFont: titleFont, titleTextColor: titleTextColor) } - private func segmentioIndicatorOptions() -> SegmentioIndicatorOptions { + fileprivate func segmentioIndicatorOptions() -> SegmentioIndicatorOptions { return SegmentioIndicatorOptions( - type: .Bottom, + type: .bottom, ratio: 1, height: 5, color: ColorPalette.CoralColor ) } - private func segmentioHorizontalSeparatorOptions() -> SegmentioHorizontalSeparatorOptions { + fileprivate func segmentioHorizontalSeparatorOptions() -> SegmentioHorizontalSeparatorOptions { return SegmentioHorizontalSeparatorOptions( - type: .TopAndBottom, + type: .topAndBottom, height: 1, color: ColorPalette.WhiteSmokeColor ) } - private func segmentioVerticalSeparatorOptions() -> SegmentioVerticalSeparatorOptions { + fileprivate func segmentioVerticalSeparatorOptions() -> SegmentioVerticalSeparatorOptions { return SegmentioVerticalSeparatorOptions( ratio: 1, color: ColorPalette.WhiteSmokeColor @@ -163,7 +163,7 @@ class ExampleViewController: UIViewController { // Example viewControllers - private func preparedViewControllers() -> [ContentViewController] { + fileprivate func preparedViewControllers() -> [ContentViewController] { let tornadoController = ContentViewController.create() tornadoController.disaster = Disaster(cardName: "Before tornado", hints: Hints.Tornado) @@ -192,35 +192,35 @@ class ExampleViewController: UIViewController { ] } - private func selectedSegmentioIndex() -> Int { + fileprivate func selectedSegmentioIndex() -> Int { return 0 } // MARK: - Setup container view - private func setupScrollView() { + fileprivate func setupScrollView() { scrollView.contentSize = CGSize( - width: UIScreen.mainScreen().bounds.width * CGFloat(viewControllers.count), + width: UIScreen.main.bounds.width * CGFloat(viewControllers.count), height: containerView.frame.height ) - for (index, viewController) in viewControllers.enumerate() { + for (index, viewController) in viewControllers.enumerated() { viewController.view.frame = CGRect( - x: UIScreen.mainScreen().bounds.width * CGFloat(index), + x: UIScreen.main.bounds.width * CGFloat(index), y: 0, width: scrollView.frame.width, height: scrollView.frame.height ) addChildViewController(viewController) scrollView.addSubview(viewController.view, options: .UseAutoresize) // module's extension - viewController.didMoveToParentViewController(self) + viewController.didMove(toParentViewController: self) } } // MARK: - Actions - private func goToControllerAtIndex(index: Int) { + fileprivate func goToControllerAtIndex(_ index: Int) { segmentioView.selectedSegmentioIndex = index } @@ -228,13 +228,13 @@ class ExampleViewController: UIViewController { extension ExampleViewController: UIScrollViewDelegate { - func scrollViewDidEndDecelerating(scrollView: UIScrollView) { + func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) { let currentPage = floor(scrollView.contentOffset.x / scrollView.frame.width) segmentioView.selectedSegmentioIndex = Int(currentPage) } - func scrollViewDidScroll(scrollView: UIScrollView) { + func scrollViewDidScroll(_ scrollView: UIScrollView) { scrollView.contentSize = CGSize(width: scrollView.contentSize.width, height: 0) } -} \ No newline at end of file +} diff --git a/Example/Segmentio/ViewControllers/HomeViewController.swift b/Example/Segmentio/ViewControllers/HomeViewController.swift index d04057d..4a24dec 100644 --- a/Example/Segmentio/ViewControllers/HomeViewController.swift +++ b/Example/Segmentio/ViewControllers/HomeViewController.swift @@ -11,8 +11,8 @@ import Segmentio class HomeViewController: UIViewController { - private var currentStyle = SegmentioStyle.OnlyImage - private var containerViewController: EmbedContainerViewController? + fileprivate var currentStyle = SegmentioStyle.OnlyImage + fileprivate var containerViewController: EmbedContainerViewController? // MARK: - Lifecycle @@ -20,26 +20,26 @@ class HomeViewController: UIViewController { super.viewDidLoad() } - override func shouldPerformSegueWithIdentifier(identifier: String, sender: AnyObject?) -> Bool { + override func shouldPerformSegue(withIdentifier identifier: String, sender: Any?) -> Bool { return true } - override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { - if segue.identifier == String(EmbedContainerViewController.self) { - containerViewController = segue.destinationViewController as? EmbedContainerViewController + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + if segue.identifier == String(describing: EmbedContainerViewController.self) { + containerViewController = segue.destination as? EmbedContainerViewController containerViewController?.style = currentStyle } } // MARK: - Actions - @IBAction private func showMenu(sender: UIBarButtonItem) { + @IBAction fileprivate func showMenu(_ sender: UIBarButtonItem) { SideMenuViewController.create().showSideMenu( viewController: self, currentStyle: currentStyle, sideMenuDidHide: { [weak self] style in - self?.dismissViewControllerAnimated( - false, + self?.dismiss( + animated: false, completion: { if self?.currentStyle != style { self?.currentStyle = style @@ -51,4 +51,4 @@ class HomeViewController: UIViewController { ) } -} \ No newline at end of file +} diff --git a/Example/Segmentio/ViewControllers/SideMenuViewController.swift b/Example/Segmentio/ViewControllers/SideMenuViewController.swift index 6bb341f..2078aa2 100644 --- a/Example/Segmentio/ViewControllers/SideMenuViewController.swift +++ b/Example/Segmentio/ViewControllers/SideMenuViewController.swift @@ -9,9 +9,9 @@ import UIKit import Segmentio -typealias SideMenuHandler = ((style: SegmentioStyle) -> Void) +typealias SideMenuHandler = ((_ style: SegmentioStyle) -> Void) -private let animationDuration: NSTimeInterval = 0.3 +private let animationDuration: TimeInterval = 0.3 private let selectedCheckboxImage = UIImage(named: "selectedCheckbox") private let defaultCheckboxImage = UIImage(named: "defaultCheckbox") @@ -19,20 +19,20 @@ class SideMenuViewController: UIViewController { var sideMenuDidHide: SideMenuHandler? - @IBOutlet private weak var shadowView: UIView! - @IBOutlet private weak var menuTableView: UITableView! - @IBOutlet private weak var menuTableViewWidthConstraint: NSLayoutConstraint! + @IBOutlet fileprivate weak var shadowView: UIView! + @IBOutlet fileprivate weak var menuTableView: UITableView! + @IBOutlet fileprivate weak var menuTableViewWidthConstraint: NSLayoutConstraint! - private var menuItems = SegmentioStyle.allStyles - private var currentStyle = SegmentioStyle.OnlyImage + fileprivate var menuItems = SegmentioStyle.allStyles + fileprivate var currentStyle = SegmentioStyle.OnlyImage // MARK: - Lifecycle override func viewDidLoad() { super.viewDidLoad() - menuTableView.hidden = true - view.hidden = true - menuTableViewWidthConstraint.constant = UIScreen.mainScreen().bounds.width * 0.7 + menuTableView.isHidden = true + view.isHidden = true + menuTableViewWidthConstraint.constant = UIScreen.main.bounds.width * 0.7 setupGestureRecognizers() } @@ -40,23 +40,23 @@ class SideMenuViewController: UIViewController { class func create() -> SideMenuViewController { let board = UIStoryboard(name: "Main", bundle: nil) - return board.instantiateViewControllerWithIdentifier(String(self)) as! SideMenuViewController + return board.instantiateViewController(withIdentifier: String(describing: self)) as! SideMenuViewController } - func showSideMenu(viewController viewController: UIViewController, currentStyle: SegmentioStyle, sideMenuDidHide: SideMenuHandler?) { + func showSideMenu(viewController: UIViewController, currentStyle: SegmentioStyle, sideMenuDidHide: SideMenuHandler?) { self.currentStyle = currentStyle self.sideMenuDidHide = sideMenuDidHide - self.modalPresentationStyle = .OverCurrentContext + self.modalPresentationStyle = .overCurrentContext let size = view.frame.size - viewController.presentViewController(self, animated: false) { [weak self] in - self?.view.hidden = false + viewController.present(self, animated: false) { [weak self] in + self?.view.isHidden = false self?.menuTableView.frame.origin = CGPoint(x: -size.width, y: 0) - UIView.animateWithDuration( - animationDuration, + UIView.animate( + withDuration: animationDuration, animations: { - self?.view.backgroundColor = UIColor.blackColor().colorWithAlphaComponent(0.63) - self?.slideAnimationToPoint(CGPointZero) - self?.menuTableView.hidden = false + self?.view.backgroundColor = UIColor.black.withAlphaComponent(0.63) + self?.slideAnimationToPoint(CGPoint.zero) + self?.menuTableView.isHidden = false } ) } @@ -64,7 +64,7 @@ class SideMenuViewController: UIViewController { // MARK: - Private functions - private func setupGestureRecognizers() { + fileprivate func setupGestureRecognizers() { let dissmisSideMenuSelector = #selector(SideMenuViewController.dissmisSideMenu) let tapRecognizer = UITapGestureRecognizer( @@ -78,50 +78,50 @@ class SideMenuViewController: UIViewController { target: self, action: dissmisSideMenuSelector ) - swipeRecognizer.direction = .Left + swipeRecognizer.direction = .left swipeRecognizer.delegate = self view.addGestureRecognizer(swipeRecognizer) } - private func didSelectItemAtIndexPath(indexPath: NSIndexPath) { - currentStyle = SegmentioStyle.allStyles[indexPath.row] + fileprivate func didSelectItemAtIndexPath(_ indexPath: IndexPath) { + currentStyle = SegmentioStyle.allStyles[(indexPath as NSIndexPath).row] dissmisSideMenu() } - @objc private func dissmisSideMenu() { + @objc fileprivate func dissmisSideMenu() { let size = view.frame.size - UIView.animateWithDuration( - animationDuration, + UIView.animate( + withDuration: animationDuration, animations: { self.slideAnimationToPoint(CGPoint(x: -size.width, y: 0)) - self.view.backgroundColor = UIColor.clearColor() + self.view.backgroundColor = UIColor.clear }, completion: { _ in - self.view.hidden = true - self.menuTableView.hidden = true - self.sideMenuDidHide?(style: self.currentStyle) + self.view.isHidden = true + self.menuTableView.isHidden = true + self.sideMenuDidHide?(self.currentStyle) } ) } - private func slideAnimationToPoint(point: CGPoint) { - UIView.animateWithDuration(animationDuration) { + fileprivate func slideAnimationToPoint(_ point: CGPoint) { + UIView.animate(withDuration: animationDuration, animations: { self.menuTableView.frame.origin = point - } + }) } - private func uncheckCurrentStyle() { - guard let currentStyleIndex = menuItems.indexOf(currentStyle) else { + fileprivate func uncheckCurrentStyle() { + guard let currentStyleIndex = menuItems.index(of: currentStyle) else { return } - let activeIndexPath = NSIndexPath( - forRow: currentStyleIndex, - inSection: menuTableView.numberOfSections - 1 + let activeIndexPath = IndexPath( + row: currentStyleIndex, + section: menuTableView.numberOfSections - 1 ) - let activeCell = menuTableView.cellForRowAtIndexPath(activeIndexPath) + let activeCell = menuTableView.cellForRow(at: activeIndexPath) activeCell?.imageView?.image = defaultCheckboxImage } @@ -129,17 +129,17 @@ class SideMenuViewController: UIViewController { extension SideMenuViewController: UITableViewDataSource { - func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return menuItems.count ?? 0 } - func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let reuseIdentifier = "Cell" - let cell = tableView.dequeueReusableCellWithIdentifier(reuseIdentifier) - let isCurrentStyle = currentStyle == menuItems[indexPath.row] + let cell = tableView.dequeueReusableCell(withIdentifier: reuseIdentifier) + let isCurrentStyle = currentStyle == menuItems[(indexPath as NSIndexPath).row] - cell!.textLabel?.text = menuItems[indexPath.row].rawValue.stringFromCamelCase() + cell!.textLabel?.text = menuItems[(indexPath as NSIndexPath).row].rawValue.stringFromCamelCase() cell!.imageView?.image = isCurrentStyle ? selectedCheckboxImage : defaultCheckboxImage return cell! @@ -149,25 +149,25 @@ extension SideMenuViewController: UITableViewDataSource { extension SideMenuViewController: UITableViewDelegate { - func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { - let cell = tableView.cellForRowAtIndexPath(indexPath) + func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { + let cell = tableView.cellForRow(at: indexPath) - if currentStyle != menuItems[indexPath.row] { + if currentStyle != menuItems[(indexPath as NSIndexPath).row] { uncheckCurrentStyle() cell?.imageView?.image = selectedCheckboxImage } didSelectItemAtIndexPath(indexPath) } - func tableView(tableView: UITableView, viewForFooterInSection section: Int) -> UIView? { + func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? { return UIView() } } extension SideMenuViewController: UIGestureRecognizerDelegate { - func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool { + func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool { return true } -} \ No newline at end of file +} diff --git a/Segmentio/Source/Badge/BadgeViewPresenter.swift b/Segmentio/Source/Badge/BadgeViewPresenter.swift index e67f6b9..78001fd 100644 --- a/Segmentio/Source/Badge/BadgeViewPresenter.swift +++ b/Segmentio/Source/Badge/BadgeViewPresenter.swift @@ -11,10 +11,10 @@ import UIKit class BadgeViewPresenter { func addBadgeForContainerView( - containerView: UIView, + _ containerView: UIView, counterValue: Int, - backgroundColor: UIColor = .redColor(), - badgeSize: CounterBadgeSize = .Standard + backgroundColor: UIColor = .red, + badgeSize: CounterBadgeSize = .standard ) { var badgeView: BadgeWithCounterView! for view in containerView.subviews { @@ -32,12 +32,12 @@ class BadgeViewPresenter { ) badgeView.translatesAutoresizingMaskIntoConstraints = false containerView.addSubview(badgeView) - containerView.bringSubviewToFront(badgeView) + containerView.bringSubview(toFront: badgeView) setupBadgeConstraints(badgeView, counterValue: counterValue) } } - func removeBadgeFromContainerView(containerView: UIView) { + func removeBadgeFromContainerView(_ containerView: UIView) { for view in containerView.subviews { if view is BadgeWithCounterView { view.removeFromSuperview() @@ -45,7 +45,7 @@ class BadgeViewPresenter { } } - private func setupBadgeConstraints(badgeView: BadgeWithCounterView, counterValue: Int) { + fileprivate func setupBadgeConstraints(_ badgeView: BadgeWithCounterView, counterValue: Int) { var constraintConstant:CGFloat = -5.0 if counterValue > 9 { constraintConstant = -10.0 @@ -53,10 +53,10 @@ class BadgeViewPresenter { let segmentTitleLabelHorizontalCenterConstraint = NSLayoutConstraint( item: badgeView, - attribute: .Top, - relatedBy: .Equal, + attribute: .top, + relatedBy: .equal, toItem: badgeView.superview, - attribute: .Top, + attribute: .top, multiplier: 1, constant: 6.0 ) @@ -64,15 +64,15 @@ class BadgeViewPresenter { let segmentTitleLabelVerticalCenterConstraint = NSLayoutConstraint( item: badgeView, - attribute: .Trailing, - relatedBy: .Equal, + attribute: .trailing, + relatedBy: .equal, toItem: badgeView.superview, - attribute: .Trailing, + attribute: .trailing, multiplier: 1, constant: constraintConstant ) - segmentTitleLabelHorizontalCenterConstraint.active = true - segmentTitleLabelVerticalCenterConstraint.active = true + segmentTitleLabelHorizontalCenterConstraint.isActive = true + segmentTitleLabelVerticalCenterConstraint.isActive = true } } @@ -81,11 +81,11 @@ class BadgeViewPresenter { extension BadgeViewPresenter { - private func badgeViewForCounterValue(counter: Int, backgroundColor: UIColor, size: CounterBadgeSize) -> BadgeWithCounterView { + fileprivate func badgeViewForCounterValue(_ counter: Int, backgroundColor: UIColor, size: CounterBadgeSize) -> BadgeWithCounterView { let view = BadgeWithCounterView.instanceFromNib(size: size) view.setBadgeBackgroundColor(backgroundColor) view.setBadgeCounterValue(counter) return view } -} \ No newline at end of file +} diff --git a/Segmentio/Source/Badge/Views/BadgeWithCounterView.swift b/Segmentio/Source/Badge/Views/BadgeWithCounterView.swift index 8d812d3..3f3de4d 100644 --- a/Segmentio/Source/Badge/Views/BadgeWithCounterView.swift +++ b/Segmentio/Source/Badge/Views/BadgeWithCounterView.swift @@ -6,26 +6,26 @@ private let standardSizedNibName = "BadgeWithCounterViewStandardSized" private let bigSizedNibName = "BadgeWithCounterViewBigSized" enum CounterBadgeSize { - case Standard - case Big + case standard + case big } class BadgeWithCounterView: UIView { - @IBOutlet private weak var counterValueLabel: UILabel! - @IBOutlet private weak var backgroundImageView: UIImageView! + @IBOutlet fileprivate weak var counterValueLabel: UILabel! + @IBOutlet fileprivate weak var backgroundImageView: UIImageView! - class func instanceFromNib(size size: CounterBadgeSize) -> BadgeWithCounterView { + class func instanceFromNib(size: CounterBadgeSize) -> BadgeWithCounterView { let nibName = nibNameForSize(size) - let podBundle = NSBundle(forClass: self.classForCoder()) + let podBundle = Bundle(for: self.classForCoder()) - if let bundleURL = podBundle.URLForResource("Segmentio", withExtension: "bundle"), bundle = NSBundle(URL: bundleURL) { - return UINib(nibName: nibName, bundle: bundle).instantiateWithOwner(nil, options: nil)[0] as! BadgeWithCounterView + if let bundleURL = podBundle.url(forResource: "Segmentio", withExtension: "bundle"), let bundle = Bundle(url: bundleURL) { + return UINib(nibName: nibName, bundle: bundle).instantiate(withOwner: nil, options: nil)[0] as! BadgeWithCounterView } - return BadgeWithCounterView(frame: CGRectZero) + return BadgeWithCounterView(frame: CGRect.zero) } - func setBadgeCounterValue(counterValue: Int) { + func setBadgeCounterValue(_ counterValue: Int) { var counterText: String! if counterValue > BadgeCounterMaxValue { counterText = BadgeCounterOverMaxValueText @@ -35,12 +35,12 @@ class BadgeWithCounterView: UIView { counterValueLabel.text = counterText } - func setBadgeBackgroundColor(color: UIColor) { + func setBadgeBackgroundColor(_ color: UIColor) { backgroundImageView.backgroundColor = color } - private class func nibNameForSize(size: CounterBadgeSize) -> String { - return (size == .Standard) ? standardSizedNibName : bigSizedNibName + fileprivate class func nibNameForSize(_ size: CounterBadgeSize) -> String { + return (size == .standard) ? standardSizedNibName : bigSizedNibName } -} \ No newline at end of file +} diff --git a/Segmentio/Source/Cells/SegmentioCell.swift b/Segmentio/Source/Cells/SegmentioCell.swift index 2cccba0..b108226 100644 --- a/Segmentio/Source/Cells/SegmentioCell.swift +++ b/Segmentio/Source/Cells/SegmentioCell.swift @@ -23,19 +23,19 @@ class SegmentioCell: UICollectionViewCell { var bottomConstraint: NSLayoutConstraint? var cellSelected = false - private var options = SegmentioOptions() - private var style = SegmentioStyle.ImageOverLabel - private let verticalSeparatorLayer = CAShapeLayer() - private let badgePresenter = BadgeViewPresenter() + fileprivate var options = SegmentioOptions() + fileprivate var style = SegmentioStyle.ImageOverLabel + fileprivate let verticalSeparatorLayer = CAShapeLayer() + fileprivate let badgePresenter = BadgeViewPresenter() - override var highlighted: Bool { + override var isHighlighted: Bool { get { - return super.highlighted + return super.isHighlighted } set { - if newValue != highlighted { - super.highlighted = newValue + if newValue != isHighlighted { + super.isHighlighted = newValue let highlightedState = options.states.highlightedState let defaultState = options.states.defaultState @@ -45,11 +45,11 @@ class SegmentioCell: UICollectionViewCell { let highlightedTitleTextColor = cellSelected ? selectedState.titleTextColor : defaultState.titleTextColor let highlightedTitleFont = cellSelected ? selectedState.titleFont : defaultState.titleFont - segmentTitleLabel?.textColor = highlighted ? highlightedState.titleTextColor : highlightedTitleTextColor - segmentTitleLabel?.font = highlighted ? highlightedState.titleFont : highlightedTitleFont + segmentTitleLabel?.textColor = isHighlighted ? highlightedState.titleTextColor : highlightedTitleTextColor + segmentTitleLabel?.font = isHighlighted ? highlightedState.titleFont : highlightedTitleFont } - backgroundColor = highlighted ? highlightedState.backgroundColor : defaultState.backgroundColor + backgroundColor = isHighlighted ? highlightedState.backgroundColor : defaultState.backgroundColor } } } @@ -58,23 +58,23 @@ class SegmentioCell: UICollectionViewCell { override init(frame: CGRect) { super.init(frame: frame) - imageContainerView = UIView(frame: CGRectZero) + imageContainerView = UIView(frame: CGRect.zero) if let imageContainerView = imageContainerView { contentView.addSubview(imageContainerView) } - segmentImageView = UIImageView(frame: CGRectZero) - if let segmentImageView = segmentImageView, imageContainerView = imageContainerView { + segmentImageView = UIImageView(frame: CGRect.zero) + if let segmentImageView = segmentImageView, let imageContainerView = imageContainerView { imageContainerView.addSubview(segmentImageView) } - containerView = UIView(frame: CGRectZero) + containerView = UIView(frame: CGRect.zero) if let containerView = containerView { contentView.addSubview(containerView) } - segmentTitleLabel = UILabel(frame: CGRectZero) - if let segmentTitleLabel = segmentTitleLabel, containerView = containerView { + segmentTitleLabel = UILabel(frame: CGRect.zero) + if let segmentTitleLabel = segmentTitleLabel, let containerView = containerView { containerView.addSubview(segmentTitleLabel) } @@ -84,7 +84,7 @@ class SegmentioCell: UICollectionViewCell { imageContainerView?.translatesAutoresizingMaskIntoConstraints = false segmentImageView?.layer.masksToBounds = true - segmentTitleLabel?.font = UIFont.systemFontOfSize(UIFont.smallSystemFontSize()) + segmentTitleLabel?.font = UIFont.systemFont(ofSize: UIFont.smallSystemFontSize) setupConstraintsForSubviews() addVerticalSeparator() @@ -114,7 +114,7 @@ class SegmentioCell: UICollectionViewCell { // MARK: - Configure - func configure(content content: SegmentioItem, style: SegmentioStyle, options: SegmentioOptions, isLastCell: Bool) { + func configure(content: SegmentioItem, style: SegmentioStyle, options: SegmentioOptions, isLastCell: Bool) { self.options = options self.style = style setupContent(content: content) @@ -130,7 +130,7 @@ class SegmentioCell: UICollectionViewCell { configurateBadgeWithCount(content.badgeCount, color: content.badgeColor) } - func configure(selected selected: Bool) { + func configure(selected: Bool) { cellSelected = selected let selectedState = options.states.selectedState @@ -142,8 +142,8 @@ class SegmentioCell: UICollectionViewCell { } } - func configurateBadgeWithCount(badgeCount: Int?, color: UIColor?) { - guard let badgeCount = badgeCount, color = color else { + func configurateBadgeWithCount(_ badgeCount: Int?, color: UIColor?) { + guard let badgeCount = badgeCount, let color = color else { return } @@ -152,14 +152,14 @@ class SegmentioCell: UICollectionViewCell { imageContainerView!, counterValue: badgeCount, backgroundColor: color, - badgeSize: .Standard + badgeSize: .standard ) } else { badgePresenter.addBadgeForContainerView( containerView!, counterValue: badgeCount, backgroundColor: color, - badgeSize: .Standard + badgeSize: .standard ) } } @@ -172,7 +172,7 @@ class SegmentioCell: UICollectionViewCell { // MARK: - Private functions - private func setupContainerConstraints() { + fileprivate func setupContainerConstraints() { guard let segmentTitleLabel = segmentTitleLabel else { return } @@ -183,10 +183,10 @@ class SegmentioCell: UICollectionViewCell { let segmentTitleLabelHorizontalCenterConstraint = NSLayoutConstraint( item: segmentTitleLabel, - attribute: .CenterX, - relatedBy: .Equal, + attribute: .centerX, + relatedBy: .equal, toItem: containerView, - attribute: .CenterX, + attribute: .centerX, multiplier: 1, constant: 0.0 ) @@ -194,17 +194,17 @@ class SegmentioCell: UICollectionViewCell { let segmentTitleLabelVerticalCenterConstraint = NSLayoutConstraint( item: segmentTitleLabel, - attribute: .CenterY, - relatedBy: .Equal, + attribute: .centerY, + relatedBy: .equal, toItem: containerView, - attribute: .CenterY, + attribute: .centerY, multiplier: 1, constant: 0.0 ) addConstraints([segmentTitleLabelHorizontalCenterConstraint, segmentTitleLabelVerticalCenterConstraint]) } - private func setupImageContainerConstraints() { + fileprivate func setupImageContainerConstraints() { guard let segmentImageView = segmentImageView else { return } @@ -215,10 +215,10 @@ class SegmentioCell: UICollectionViewCell { let segmentImageViewTopConstraint = NSLayoutConstraint( item: segmentImageView, - attribute: .Top, - relatedBy: .Equal, + attribute: .top, + relatedBy: .equal, toItem: imageContainerView, - attribute: .Top, + attribute: .top, multiplier: 1, constant: 0.0 ) @@ -226,10 +226,10 @@ class SegmentioCell: UICollectionViewCell { let segmentImageViewLeadingConstraint = NSLayoutConstraint( item: segmentImageView, - attribute: .Leading, - relatedBy: .Equal, + attribute: .leading, + relatedBy: .equal, toItem: imageContainerView, - attribute: .Leading, + attribute: .leading, multiplier: 1, constant: 0.0 ) @@ -237,10 +237,10 @@ class SegmentioCell: UICollectionViewCell { let segmentImageViewTrailingConstraint = NSLayoutConstraint( item: segmentImageView, - attribute: .Trailing, - relatedBy: .Equal, + attribute: .trailing, + relatedBy: .equal, toItem: imageContainerView, - attribute: .Trailing, + attribute: .trailing, multiplier: 1, constant: 0.0 ) @@ -248,10 +248,10 @@ class SegmentioCell: UICollectionViewCell { let segmentImageViewBottomConstraint = NSLayoutConstraint( item: segmentImageView, - attribute: .Bottom, - relatedBy: .Equal, + attribute: .bottom, + relatedBy: .equal, toItem: imageContainerView, - attribute: .Bottom, + attribute: .bottom, multiplier: 1, constant: 0.0 ) @@ -259,7 +259,7 @@ class SegmentioCell: UICollectionViewCell { } - private func setupContent(content content: SegmentioItem) { + fileprivate func setupContent(content: SegmentioItem) { if style.isWithImage() { segmentImageView?.contentMode = options.imageContentMode segmentImageView?.image = content.image @@ -274,18 +274,18 @@ class SegmentioCell: UICollectionViewCell { } } - private func setupConstraint(indicatorOptions indicatorOptions: SegmentioIndicatorOptions) { + fileprivate func setupConstraint(indicatorOptions: SegmentioIndicatorOptions) { switch indicatorOptions.type { - case .Top: + case .top: topConstraint?.constant = padding + indicatorOptions.height - case .Bottom: + case .bottom: bottomConstraint?.constant = padding + indicatorOptions.height } } // MARK: - Vertical separator - private func addVerticalSeparator() { + fileprivate func addVerticalSeparator() { let contentViewWidth = contentView.bounds.width let rect = CGRect( x: contentView.bounds.width - 1, @@ -311,50 +311,50 @@ class SegmentioCell: UICollectionViewCell { let widthConstraint = NSLayoutConstraint( item: verticalSeparatorView, - attribute: .Width, - relatedBy: .Equal, + attribute: .width, + relatedBy: .equal, toItem: nil, - attribute: .NotAnAttribute, + attribute: .notAnAttribute, multiplier: 1, constant: 1 ) - widthConstraint.active = true + widthConstraint.isActive = true let trailingConstraint = NSLayoutConstraint( item: verticalSeparatorView, - attribute: .Trailing, - relatedBy: .Equal, + attribute: .trailing, + relatedBy: .equal, toItem: contentView, - attribute: .Trailing, + attribute: .trailing, multiplier: 1, constant: 0 ) - trailingConstraint.active = true + trailingConstraint.isActive = true let topConstraint = NSLayoutConstraint( item: verticalSeparatorView, - attribute: .Top, - relatedBy: .Equal, + attribute: .top, + relatedBy: .equal, toItem: contentView, - attribute: .Top, + attribute: .top, multiplier: 1, constant: 0 ) - topConstraint.active = true + topConstraint.isActive = true let bottomConstraint = NSLayoutConstraint( item: contentView, - attribute: .Bottom, - relatedBy: .Equal, + attribute: .bottom, + relatedBy: .equal, toItem: verticalSeparatorView, - attribute: .Bottom, + attribute: .bottom, multiplier: 1, constant: 0 ) - bottomConstraint.active = true + bottomConstraint.isActive = true } - private func setupVerticalSeparators() { + fileprivate func setupVerticalSeparators() { guard let verticalSeparatorOptions = options.verticalSeparatorOptions else { return } @@ -370,15 +370,15 @@ class SegmentioCell: UICollectionViewCell { let endY = bounds.height - difference let path = UIBezierPath() - path.moveToPoint(CGPoint(x: verticalSeparatorView.frame.width / 2, y: startY)) - path.addLineToPoint(CGPoint(x: verticalSeparatorView.frame.width / 2, y: endY)) + path.move(to: CGPoint(x: verticalSeparatorView.frame.width / 2, y: startY)) + path.addLine(to: CGPoint(x: verticalSeparatorView.frame.width / 2, y: endY)) - verticalSeparatorLayer.path = path.CGPath + verticalSeparatorLayer.path = path.cgPath verticalSeparatorLayer.lineWidth = 1 - verticalSeparatorLayer.strokeColor = verticalSeparatorOptions.color.CGColor - verticalSeparatorLayer.fillColor = verticalSeparatorOptions.color.CGColor + verticalSeparatorLayer.strokeColor = verticalSeparatorOptions.color.cgColor + verticalSeparatorLayer.fillColor = verticalSeparatorOptions.color.cgColor verticalSeparatorView.layer.addSublayer(verticalSeparatorLayer) } -} \ No newline at end of file +} diff --git a/Segmentio/Source/Cells/SegmentioCellWithImage.swift b/Segmentio/Source/Cells/SegmentioCellWithImage.swift index 19c8e94..bf26605 100644 --- a/Segmentio/Source/Cells/SegmentioCellWithImage.swift +++ b/Segmentio/Source/Cells/SegmentioCellWithImage.swift @@ -20,36 +20,36 @@ final class SegmentioCellWithImage: SegmentioCell { // main constraints - let segmentImageViewlHorizontConstraint = NSLayoutConstraint.constraintsWithVisualFormat( - "|-[imageContainerView]-|", + let segmentImageViewlHorizontConstraint = NSLayoutConstraint.constraints( + withVisualFormat: "|-[imageContainerView]-|", options: [], metrics: nil, views: views) - NSLayoutConstraint.activateConstraints(segmentImageViewlHorizontConstraint) + NSLayoutConstraint.activate(segmentImageViewlHorizontConstraint) // custom constraints topConstraint = NSLayoutConstraint( item: imageContainerView, - attribute: .Top, - relatedBy: .Equal, + attribute: .top, + relatedBy: .equal, toItem: contentView, - attribute: .Top, + attribute: .top, multiplier: 1, constant: padding ) - topConstraint?.active = true + topConstraint?.isActive = true bottomConstraint = NSLayoutConstraint( item: contentView, - attribute: .Bottom, - relatedBy: .Equal, + attribute: .bottom, + relatedBy: .equal, toItem: imageContainerView, - attribute: .Bottom, + attribute: .bottom, multiplier: 1, constant: padding ) - bottomConstraint?.active = true + bottomConstraint?.isActive = true } -} \ No newline at end of file +} diff --git a/Segmentio/Source/Cells/SegmentioCellWithImageAfterLabel.swift b/Segmentio/Source/Cells/SegmentioCellWithImageAfterLabel.swift index ef4e69b..d951078 100644 --- a/Segmentio/Source/Cells/SegmentioCellWithImageAfterLabel.swift +++ b/Segmentio/Source/Cells/SegmentioCellWithImageAfterLabel.swift @@ -27,42 +27,42 @@ final class SegmentioCellWithImageAfterLabel: SegmentioCell { // main constraints - let segmentImageViewVerticalConstraint = NSLayoutConstraint.constraintsWithVisualFormat( - "V:[imageContainerView(labelHeight)]", - options: [.AlignAllCenterY], + let segmentImageViewVerticalConstraint = NSLayoutConstraint.constraints( + withVisualFormat: "V:[imageContainerView(labelHeight)]", + options: [.alignAllCenterY], metrics: metrics, views: views) - NSLayoutConstraint.activateConstraints(segmentImageViewVerticalConstraint) + NSLayoutConstraint.activate(segmentImageViewVerticalConstraint) - let contentViewHorizontalConstraints = NSLayoutConstraint.constraintsWithVisualFormat( - "|-[containerView]-[imageContainerView(labelHeight)]-|", - options: [.AlignAllCenterY], + let contentViewHorizontalConstraints = NSLayoutConstraint.constraints( + withVisualFormat: "|-[containerView]-[imageContainerView(labelHeight)]-|", + options: [.alignAllCenterY], metrics: metrics, views: views) - NSLayoutConstraint.activateConstraints(contentViewHorizontalConstraints) + NSLayoutConstraint.activate(contentViewHorizontalConstraints) // custom constraints topConstraint = NSLayoutConstraint( item: containerView, - attribute: .Top, - relatedBy: .Equal, + attribute: .top, + relatedBy: .equal, toItem: contentView, - attribute: .Top, + attribute: .top, multiplier: 1, constant: padding ) - topConstraint?.active = true + topConstraint?.isActive = true bottomConstraint = NSLayoutConstraint( item: contentView, - attribute: .Bottom, - relatedBy: .Equal, + attribute: .bottom, + relatedBy: .equal, toItem: containerView, - attribute: .Bottom, + attribute: .bottom, multiplier: 1, constant: padding ) - bottomConstraint?.active = true + bottomConstraint?.isActive = true } -} \ No newline at end of file +} diff --git a/Segmentio/Source/Cells/SegmentioCellWithImageBeforeLabel.swift b/Segmentio/Source/Cells/SegmentioCellWithImageBeforeLabel.swift index 554a2e0..d3ab614 100644 --- a/Segmentio/Source/Cells/SegmentioCellWithImageBeforeLabel.swift +++ b/Segmentio/Source/Cells/SegmentioCellWithImageBeforeLabel.swift @@ -27,43 +27,43 @@ class SegmentioCellWithImageBeforeLabel: SegmentioCell { // main constraints - let segmentImageViewVerticalConstraint = NSLayoutConstraint.constraintsWithVisualFormat( - "V:[imageContainerView(labelHeight)]", - options: [.AlignAllCenterY], + let segmentImageViewVerticalConstraint = NSLayoutConstraint.constraints( + withVisualFormat: "V:[imageContainerView(labelHeight)]", + options: [.alignAllCenterY], metrics: metrics, views: views) - NSLayoutConstraint.activateConstraints(segmentImageViewVerticalConstraint) + NSLayoutConstraint.activate(segmentImageViewVerticalConstraint) - let contentViewHorizontalConstraints = NSLayoutConstraint.constraintsWithVisualFormat( - "|-[imageContainerView(labelHeight)]-[containerView]-|", - options: [.AlignAllCenterY], + let contentViewHorizontalConstraints = NSLayoutConstraint.constraints( + withVisualFormat: "|-[imageContainerView(labelHeight)]-[containerView]-|", + options: [.alignAllCenterY], metrics: metrics, views: views) - NSLayoutConstraint.activateConstraints(contentViewHorizontalConstraints) + NSLayoutConstraint.activate(contentViewHorizontalConstraints) // custom constraints topConstraint = NSLayoutConstraint( item: containerView, - attribute: .Top, - relatedBy: .Equal, + attribute: .top, + relatedBy: .equal, toItem: contentView, - attribute: .Top, + attribute: .top, multiplier: 1, constant: padding ) - topConstraint?.active = true + topConstraint?.isActive = true bottomConstraint = NSLayoutConstraint( item: contentView, - attribute: .Bottom, - relatedBy: .Equal, + attribute: .bottom, + relatedBy: .equal, toItem: containerView, - attribute: .Bottom, + attribute: .bottom, multiplier: 1, constant: padding ) - bottomConstraint?.active = true + bottomConstraint?.isActive = true } -} \ No newline at end of file +} diff --git a/Segmentio/Source/Cells/SegmentioCellWithImageOverLabel.swift b/Segmentio/Source/Cells/SegmentioCellWithImageOverLabel.swift index d25bfa6..b70f32a 100644 --- a/Segmentio/Source/Cells/SegmentioCellWithImageOverLabel.swift +++ b/Segmentio/Source/Cells/SegmentioCellWithImageOverLabel.swift @@ -27,53 +27,53 @@ class SegmentioCellWithImageOverLabel: SegmentioCell { // main constraints - let segmentImageViewHorizontConstraint = NSLayoutConstraint.constraintsWithVisualFormat( - "|-[imageContainerView]-|", + let segmentImageViewHorizontConstraint = NSLayoutConstraint.constraints( + withVisualFormat: "|-[imageContainerView]-|", options: [], metrics: nil, views: views) - NSLayoutConstraint.activateConstraints(segmentImageViewHorizontConstraint) + NSLayoutConstraint.activate(segmentImageViewHorizontConstraint) - let segmentTitleLabelHorizontConstraint = NSLayoutConstraint.constraintsWithVisualFormat( - "|-[containerView]-|", - options: [.AlignAllCenterX], + let segmentTitleLabelHorizontConstraint = NSLayoutConstraint.constraints( + withVisualFormat: "|-[containerView]-|", + options: [.alignAllCenterX], metrics: nil, views: views ) - NSLayoutConstraint.activateConstraints(segmentTitleLabelHorizontConstraint) + NSLayoutConstraint.activate(segmentTitleLabelHorizontConstraint) - let contentViewVerticalConstraints = NSLayoutConstraint.constraintsWithVisualFormat( - "V:[imageContainerView]-[containerView(labelHeight)]", + let contentViewVerticalConstraints = NSLayoutConstraint.constraints( + withVisualFormat: "V:[imageContainerView]-[containerView(labelHeight)]", options: [], metrics: metrics, views: views) - NSLayoutConstraint.activateConstraints(contentViewVerticalConstraints) + NSLayoutConstraint.activate(contentViewVerticalConstraints) // custom constraints topConstraint = NSLayoutConstraint( item: imageContainerView, - attribute: .Top, - relatedBy: .Equal, + attribute: .top, + relatedBy: .equal, toItem: contentView, - attribute: .Top, + attribute: .top, multiplier: 1, constant: padding ) - topConstraint?.active = true + topConstraint?.isActive = true bottomConstraint = NSLayoutConstraint( item: contentView, - attribute: .Bottom, - relatedBy: .Equal, + attribute: .bottom, + relatedBy: .equal, toItem: containerView, - attribute: .Bottom, + attribute: .bottom, multiplier: 1, constant: padding ) - bottomConstraint?.active = true + bottomConstraint?.isActive = true } -} \ No newline at end of file +} diff --git a/Segmentio/Source/Cells/SegmentioCellWithImageUnderLabel.swift b/Segmentio/Source/Cells/SegmentioCellWithImageUnderLabel.swift index 20327c4..29b7e04 100644 --- a/Segmentio/Source/Cells/SegmentioCellWithImageUnderLabel.swift +++ b/Segmentio/Source/Cells/SegmentioCellWithImageUnderLabel.swift @@ -27,51 +27,51 @@ class SegmentioCellWithImageUnderLabel: SegmentioCell { // main constraints - let segmentImageViewHorizontConstraint = NSLayoutConstraint.constraintsWithVisualFormat( - "|-[imageContainerView]-|", + let segmentImageViewHorizontConstraint = NSLayoutConstraint.constraints( + withVisualFormat: "|-[imageContainerView]-|", options: [], metrics: nil, views: views) - NSLayoutConstraint.activateConstraints(segmentImageViewHorizontConstraint) + NSLayoutConstraint.activate(segmentImageViewHorizontConstraint) - let segmentTitleLabelHorizontConstraint = NSLayoutConstraint.constraintsWithVisualFormat( - "|-[containerView]-|", - options: [.AlignAllCenterX], + let segmentTitleLabelHorizontConstraint = NSLayoutConstraint.constraints( + withVisualFormat: "|-[containerView]-|", + options: [.alignAllCenterX], metrics: nil, views: views ) - NSLayoutConstraint.activateConstraints(segmentTitleLabelHorizontConstraint) + NSLayoutConstraint.activate(segmentTitleLabelHorizontConstraint) - let contentViewVerticalConstraints = NSLayoutConstraint.constraintsWithVisualFormat( - "V:[containerView(labelHeight)]-[imageContainerView]", + let contentViewVerticalConstraints = NSLayoutConstraint.constraints( + withVisualFormat: "V:[containerView(labelHeight)]-[imageContainerView]", options: [], metrics: metrics, views: views) - NSLayoutConstraint.activateConstraints(contentViewVerticalConstraints) + NSLayoutConstraint.activate(contentViewVerticalConstraints) // custom constraints topConstraint = NSLayoutConstraint( item: containerView, - attribute: .Top, - relatedBy: .Equal, + attribute: .top, + relatedBy: .equal, toItem: contentView, - attribute: .Top, + attribute: .top, multiplier: 1, constant: padding ) - topConstraint?.active = true + topConstraint?.isActive = true bottomConstraint = NSLayoutConstraint( item: contentView, - attribute: .Bottom, - relatedBy: .Equal, + attribute: .bottom, + relatedBy: .equal, toItem: imageContainerView, - attribute: .Bottom, + attribute: .bottom, multiplier: 1, constant: padding ) - bottomConstraint?.active = true + bottomConstraint?.isActive = true } -} \ No newline at end of file +} diff --git a/Segmentio/Source/Cells/SegmentioCellWithLabel.swift b/Segmentio/Source/Cells/SegmentioCellWithLabel.swift index b933202..ab47b8a 100644 --- a/Segmentio/Source/Cells/SegmentioCellWithLabel.swift +++ b/Segmentio/Source/Cells/SegmentioCellWithLabel.swift @@ -21,37 +21,37 @@ final class SegmentioCellWithLabel: SegmentioCell { // main constraints - let segmentTitleLabelHorizontConstraint = NSLayoutConstraint.constraintsWithVisualFormat( - "|-[containerView]-|", - options: [.AlignAllCenterX], + let segmentTitleLabelHorizontConstraint = NSLayoutConstraint.constraints( + withVisualFormat: "|-[containerView]-|", + options: [.alignAllCenterX], metrics: nil, views: views ) - NSLayoutConstraint.activateConstraints(segmentTitleLabelHorizontConstraint) + NSLayoutConstraint.activate(segmentTitleLabelHorizontConstraint) // custom constraints topConstraint = NSLayoutConstraint( item: containerView, - attribute: .Top, - relatedBy: .Equal, + attribute: .top, + relatedBy: .equal, toItem: contentView, - attribute: .Top, + attribute: .top, multiplier: 1, constant: padding ) - topConstraint?.active = true + topConstraint?.isActive = true bottomConstraint = NSLayoutConstraint( item: contentView, - attribute: .Bottom, - relatedBy: .Equal, + attribute: .bottom, + relatedBy: .equal, toItem: containerView, - attribute: .Bottom, + attribute: .bottom, multiplier: 1, constant: padding ) - bottomConstraint?.active = true + bottomConstraint?.isActive = true } -} \ No newline at end of file +} diff --git a/Segmentio/Source/Extensions/RoundImageView.swift b/Segmentio/Source/Extensions/RoundImageView.swift index bcee89f..b97cd0e 100644 --- a/Segmentio/Source/Extensions/RoundImageView.swift +++ b/Segmentio/Source/Extensions/RoundImageView.swift @@ -15,9 +15,9 @@ class RoundImageView: UIImageView { updateCornerRadiusValue() } - private func updateCornerRadiusValue() { + fileprivate func updateCornerRadiusValue() { let cornerRadius = min(bounds.size.height, bounds.size.width) / 2 layer.cornerRadius = cornerRadius } -} \ No newline at end of file +} diff --git a/Segmentio/Source/Extensions/UIView+Appearance.swift b/Segmentio/Source/Extensions/UIView+Appearance.swift index 70a759d..c160ce2 100644 --- a/Segmentio/Source/Extensions/UIView+Appearance.swift +++ b/Segmentio/Source/Extensions/UIView+Appearance.swift @@ -8,9 +8,9 @@ import UIKit -private typealias SubviewTreeModifier = (Void -> UIView) +private typealias SubviewTreeModifier = ((Void) -> UIView) -public struct AppearanceOptions: OptionSetType { +public struct AppearanceOptions: OptionSet { public let rawValue: UInt public init(rawValue: UInt) { self.rawValue = rawValue } public static let Overlay = AppearanceOptions(rawValue: 1 << 0) @@ -19,23 +19,23 @@ public struct AppearanceOptions: OptionSetType { extension UIView { - private func addSubviewUsingOptions(options: AppearanceOptions, modifier: SubviewTreeModifier) { + fileprivate func addSubviewUsingOptions(_ options: AppearanceOptions, modifier: SubviewTreeModifier) { let subview = modifier() if options.union(.Overlay) == .Overlay { if options.union(.UseAutoresize) != .UseAutoresize { subview.translatesAutoresizingMaskIntoConstraints = false let views = dictionaryOfNames([subview]) - let horisontalConstraints = NSLayoutConstraint.constraintsWithVisualFormat( - "|[subview]|", + let horisontalConstraints = NSLayoutConstraint.constraints( + withVisualFormat: "|[subview]|", options: [], metrics: nil, views: views ) addConstraints(horisontalConstraints) - let verticalConstraints = NSLayoutConstraint.constraintsWithVisualFormat( - "V:|[subview]|", + let verticalConstraints = NSLayoutConstraint.constraints( + withVisualFormat: "V:|[subview]|", options: [], metrics: nil, views: views @@ -44,14 +44,14 @@ extension UIView { } else { frame = bounds - subview.autoresizingMask = [.FlexibleWidth, .FlexibleHeight] + subview.autoresizingMask = [.flexibleWidth, .flexibleHeight] } } } - private func dictionaryOfNames(views:[UIView]) -> [String: UIView] { + fileprivate func dictionaryOfNames(_ views:[UIView]) -> [String: UIView] { var container = [String: UIView]() - for (_, value) in views.enumerate() { + for (_, value) in views.enumerated() { container["subview"] = value } return container @@ -59,7 +59,7 @@ extension UIView { // MARK: - Interface methods - public func addSubview(subview: UIView, options: AppearanceOptions) { + public func addSubview(_ subview: UIView, options: AppearanceOptions) { if subview.superview == self { return } @@ -69,14 +69,14 @@ extension UIView { } } - public func insertSubview(subview: UIView, index: Int, options: AppearanceOptions) { + public func insertSubview(_ subview: UIView, index: Int, options: AppearanceOptions) { if subview.superview == self { return } addSubviewUsingOptions(options) { [weak self] in - self?.insertSubview(subview, atIndex: index) + self?.insertSubview(subview, at: index) return subview } } -} \ No newline at end of file +} diff --git a/Segmentio/Source/Segmentio.swift b/Segmentio/Source/Segmentio.swift index 4519d11..4cdc681 100644 --- a/Segmentio/Source/Segmentio.swift +++ b/Segmentio/Source/Segmentio.swift @@ -9,11 +9,11 @@ import UIKit import QuartzCore -public typealias SegmentioSelectionCallback = ((segmentio: Segmentio, selectedSegmentioIndex: Int) -> Void) +public typealias SegmentioSelectionCallback = ((_ segmentio: Segmentio, _ selectedSegmentioIndex: Int) -> Void) private let animationDuration: CFTimeInterval = 0.3 -public class Segmentio: UIView { +open class Segmentio: UIView { internal struct Points { var startPoint: CGPoint @@ -36,28 +36,28 @@ public class Segmentio: UIView { var endX: CGFloat } - public var valueDidChange: SegmentioSelectionCallback? - public var selectedSegmentioIndex = -1 { + open var valueDidChange: SegmentioSelectionCallback? + open var selectedSegmentioIndex = -1 { didSet { if selectedSegmentioIndex != oldValue { reloadSegmentio() - valueDidChange?(segmentio: self, selectedSegmentioIndex: selectedSegmentioIndex) + valueDidChange?(self, selectedSegmentioIndex) } } } - private var segmentioCollectionView: UICollectionView? - private var segmentioItems = [SegmentioItem]() - private var segmentioOptions = SegmentioOptions() - private var segmentioStyle = SegmentioStyle.ImageOverLabel - private var isPerformingScrollAnimation = false + fileprivate var segmentioCollectionView: UICollectionView? + fileprivate var segmentioItems = [SegmentioItem]() + fileprivate var segmentioOptions = SegmentioOptions() + fileprivate var segmentioStyle = SegmentioStyle.ImageOverLabel + fileprivate var isPerformingScrollAnimation = false - private var topSeparatorView: UIView? - private var bottomSeparatorView: UIView? - private var indicatorLayer: CAShapeLayer? - private var selectedLayer: CAShapeLayer? + fileprivate var topSeparatorView: UIView? + fileprivate var bottomSeparatorView: UIView? + fileprivate var indicatorLayer: CAShapeLayer? + fileprivate var selectedLayer: CAShapeLayer? - private var cachedOrientation: UIInterfaceOrientation? = UIApplication.sharedApplication().statusBarOrientation { + fileprivate var cachedOrientation: UIInterfaceOrientation? = UIApplication.shared.statusBarOrientation { didSet { if cachedOrientation != oldValue { reloadSegmentio() @@ -68,7 +68,7 @@ public class Segmentio: UIView { // MARK: - Lifecycle deinit { - NSNotificationCenter.defaultCenter().removeObserver(self) + NotificationCenter.default.removeObserver(self) } required public init?(coder aDecoder: NSCoder) { @@ -81,20 +81,20 @@ public class Segmentio: UIView { commonInit() } - private func commonInit() { + fileprivate func commonInit() { setupSegmentedCollectionView() - NSNotificationCenter.defaultCenter().addObserver( + NotificationCenter.default.addObserver( self, selector: #selector(Segmentio.handleOrientationNotification), - name: UIDeviceOrientationDidChangeNotification, + name: NSNotification.Name.UIDeviceOrientationDidChange, object: nil ) } - private func setupSegmentedCollectionView() { + fileprivate func setupSegmentedCollectionView() { let layout = UICollectionViewFlowLayout() - layout.sectionInset = UIEdgeInsetsZero - layout.scrollDirection = .Horizontal + layout.sectionInset = UIEdgeInsets.zero + layout.scrollDirection = .horizontal layout.minimumInteritemSpacing = 0 layout.minimumLineSpacing = 0 @@ -105,12 +105,12 @@ public class Segmentio: UIView { collectionView.dataSource = self collectionView.delegate = self - collectionView.pagingEnabled = false + collectionView.isPagingEnabled = false collectionView.showsHorizontalScrollIndicator = false collectionView.showsVerticalScrollIndicator = false collectionView.bounces = true - collectionView.scrollEnabled = segmentioOptions.scrollEnabled - collectionView.backgroundColor = UIColor.clearColor() + collectionView.isScrollEnabled = segmentioOptions.scrollEnabled + collectionView.backgroundColor = UIColor.clear segmentioCollectionView = collectionView @@ -119,7 +119,7 @@ public class Segmentio: UIView { } } - private func frameForSegmentCollectionView() -> CGRect { + fileprivate func frameForSegmentCollectionView() -> CGRect { var separatorsHeight: CGFloat = 0 var collectionViewFrameMinY: CGFloat = 0 @@ -127,12 +127,12 @@ public class Segmentio: UIView { let separatorHeight = horizontalSeparatorOptions.height switch horizontalSeparatorOptions.type { - case .Top: + case .top: collectionViewFrameMinY = separatorHeight separatorsHeight = separatorHeight - case .Bottom: + case .bottom: separatorsHeight = separatorHeight - case .TopAndBottom: + case .topAndBottom: collectionViewFrameMinY = separatorHeight separatorsHeight = separatorHeight * 2 } @@ -148,14 +148,14 @@ public class Segmentio: UIView { // MARK: - Handle orientation notification - @objc private func handleOrientationNotification() { - cachedOrientation = UIApplication.sharedApplication().statusBarOrientation + @objc fileprivate func handleOrientationNotification() { + cachedOrientation = UIApplication.shared.statusBarOrientation } // MARK: - Setups: // MARK: Main setup - public func setup(content content: [SegmentioItem], style: SegmentioStyle, options: SegmentioOptions?) { + open func setup(content: [SegmentioItem], style: SegmentioStyle, options: SegmentioOptions?) { segmentioItems = content segmentioStyle = style @@ -164,13 +164,13 @@ public class Segmentio: UIView { if let options = options { segmentioOptions = options - segmentioCollectionView?.scrollEnabled = segmentioOptions.scrollEnabled + segmentioCollectionView?.isScrollEnabled = segmentioOptions.scrollEnabled backgroundColor = options.backgroundColor } - if segmentioOptions.states.selectedState.backgroundColor != UIColor.clearColor() { + if segmentioOptions.states.selectedState.backgroundColor != UIColor.clear { selectedLayer = CAShapeLayer() - if let selectedLayer = selectedLayer, sublayer = segmentioCollectionView?.layer { + if let selectedLayer = selectedLayer, let sublayer = segmentioCollectionView?.layer { setupShapeLayer( shapeLayer: selectedLayer, backgroundColor: segmentioOptions.states.selectedState.backgroundColor, @@ -197,25 +197,25 @@ public class Segmentio: UIView { segmentioCollectionView?.reloadData() } - public override func didMoveToSuperview() { + open override func didMoveToSuperview() { super.didMoveToSuperview() setupHorizontalSeparatorIfPossible() } - public func setupBadgeAtIndex(index: Int, count: Int, color: UIColor) { + open func setupBadgeAtIndex(_ index: Int, count: Int, color: UIColor) { segmentioItems[index].setupBadgeWithCount(count, color: color) segmentioCollectionView?.reloadData() } - public func removeBadgeAtIndex(index: Int) { + open func removeBadgeAtIndex(_ index: Int) { segmentioItems[index].removeBadge() segmentioCollectionView?.reloadData() } // MARK: Collection view setup - private func setupCellWithStyle(style: SegmentioStyle) { + fileprivate func setupCellWithStyle(_ style: SegmentioStyle) { var cellClass: SegmentioCell.Type { switch style { case .OnlyLabel: @@ -233,7 +233,7 @@ public class Segmentio: UIView { } } - segmentioCollectionView?.registerClass( + segmentioCollectionView?.register( cellClass, forCellWithReuseIdentifier: segmentioStyle.rawValue ) @@ -243,13 +243,13 @@ public class Segmentio: UIView { // MARK: Horizontal separators setup - private func setupHorizontalSeparatorIfPossible() { + fileprivate func setupHorizontalSeparatorIfPossible() { if superview != nil && segmentioOptions.horizontalSeparatorOptions != nil { setupHorizontalSeparator() } } - private func setupHorizontalSeparator() { + fileprivate func setupHorizontalSeparator() { topSeparatorView?.removeFromSuperview() bottomSeparatorView?.removeFromSuperview() @@ -260,16 +260,16 @@ public class Segmentio: UIView { let height = horizontalSeparatorOptions.height let type = horizontalSeparatorOptions.type - if type == .Top || type == .TopAndBottom { - topSeparatorView = UIView(frame: CGRectZero) + if type == .top || type == .topAndBottom { + topSeparatorView = UIView(frame: CGRect.zero) setupConstraintsForSeparatorView( separatorView: topSeparatorView, originY: 0 ) } - if type == .Bottom || type == .TopAndBottom { - bottomSeparatorView = UIView(frame: CGRectZero) + if type == .bottom || type == .topAndBottom { + bottomSeparatorView = UIView(frame: CGRect.zero) setupConstraintsForSeparatorView( separatorView: bottomSeparatorView, originY: frame.maxY - height @@ -277,8 +277,8 @@ public class Segmentio: UIView { } } - private func setupConstraintsForSeparatorView(separatorView separatorView: UIView?, originY: CGFloat) { - guard let horizontalSeparatorOptions = segmentioOptions.horizontalSeparatorOptions, separatorView = separatorView else { + fileprivate func setupConstraintsForSeparatorView(separatorView: UIView?, originY: CGFloat) { + guard let horizontalSeparatorOptions = segmentioOptions.horizontalSeparatorOptions, let separatorView = separatorView else { return } @@ -288,61 +288,61 @@ public class Segmentio: UIView { let topConstraint = NSLayoutConstraint( item: separatorView, - attribute: .Top, - relatedBy: .Equal, + attribute: .top, + relatedBy: .equal, toItem: superview, - attribute: .Top, + attribute: .top, multiplier: 1, constant: originY ) - topConstraint.active = true + topConstraint.isActive = true let leadingConstraint = NSLayoutConstraint( item: separatorView, - attribute: .Leading, - relatedBy: .Equal, + attribute: .leading, + relatedBy: .equal, toItem: self, - attribute: .Leading, + attribute: .leading, multiplier: 1, constant: 0 ) - leadingConstraint.active = true + leadingConstraint.isActive = true let trailingConstraint = NSLayoutConstraint( item: separatorView, - attribute: .Trailing, - relatedBy: .Equal, + attribute: .trailing, + relatedBy: .equal, toItem: self, - attribute: .Trailing, + attribute: .trailing, multiplier: 1, constant: 0 ) - trailingConstraint.active = true + trailingConstraint.isActive = true let heightConstraint = NSLayoutConstraint( item: separatorView, - attribute: .Height, - relatedBy: .Equal, + attribute: .height, + relatedBy: .equal, toItem: nil, - attribute: .NotAnAttribute, + attribute: .notAnAttribute, multiplier: 1, constant: horizontalSeparatorOptions.height ) - heightConstraint.active = true + heightConstraint.isActive = true } // MARK: CAShapeLayers setup - private func setupShapeLayer(shapeLayer shapeLayer: CAShapeLayer, backgroundColor: UIColor, height: CGFloat, sublayer: CALayer) { - shapeLayer.fillColor = backgroundColor.CGColor - shapeLayer.strokeColor = backgroundColor.CGColor + fileprivate func setupShapeLayer(shapeLayer: CAShapeLayer, backgroundColor: UIColor, height: CGFloat, sublayer: CALayer) { + shapeLayer.fillColor = backgroundColor.cgColor + shapeLayer.strokeColor = backgroundColor.cgColor shapeLayer.lineWidth = height layer.insertSublayer(shapeLayer, below: sublayer) } // MARK: - Actions: // MARK: Reload segmentio - private func reloadSegmentio() { + fileprivate func reloadSegmentio() { segmentioCollectionView?.reloadData() scrollToItemAtContext() moveShapeLayerAtContext() @@ -350,7 +350,7 @@ public class Segmentio: UIView { // MARK: Move shape layer to item - private func moveShapeLayerAtContext() { + fileprivate func moveShapeLayerAtContext() { if let indicatorLayer = indicatorLayer, let options = segmentioOptions.indicatorOptions { let item = itemInSuperview(ratio: options.ratio) let context = contextForItem(item) @@ -390,8 +390,8 @@ public class Segmentio: UIView { // MARK: Scroll to item - private func scrollToItemAtContext() { - guard let numberOfSections = segmentioCollectionView?.numberOfSections() else { + fileprivate func scrollToItemAtContext() { + guard let numberOfSections = segmentioCollectionView?.numberOfSections else { return } @@ -400,20 +400,20 @@ public class Segmentio: UIView { if context.isLastOrPrelastVisibleCell == true { let newIndex = selectedSegmentioIndex + (context.isLastCell ? 0 : 1) - let newIndexPath = NSIndexPath(forItem: newIndex, inSection: numberOfSections - 1) - segmentioCollectionView?.scrollToItemAtIndexPath( - newIndexPath, - atScrollPosition: .None, + let newIndexPath = IndexPath(item: newIndex, section: numberOfSections - 1) + segmentioCollectionView?.scrollToItem( + at: newIndexPath, + at: UICollectionViewScrollPosition(), animated: true ) } if context.isFirstOrSecondVisibleCell == true { let newIndex = selectedSegmentioIndex - (context.isFirstIndex ? 1 : 0) - let newIndexPath = NSIndexPath(forItem: newIndex, inSection: numberOfSections - 1) - segmentioCollectionView?.scrollToItemAtIndexPath( - newIndexPath, - atScrollPosition: .None, + let newIndexPath = IndexPath(item: newIndex, section: numberOfSections - 1) + segmentioCollectionView?.scrollToItem( + at: newIndexPath, + at: UICollectionViewScrollPosition(), animated: true ) } @@ -421,38 +421,38 @@ public class Segmentio: UIView { // MARK: Move shape layer - private func moveShapeLayer(shapeLayer: CAShapeLayer, startPoint: CGPoint, endPoint: CGPoint, animated: Bool = false) { + fileprivate func moveShapeLayer(_ shapeLayer: CAShapeLayer, startPoint: CGPoint, endPoint: CGPoint, animated: Bool = false) { var endPointWithVerticalSeparator = endPoint let isLastItem = selectedSegmentioIndex + 1 == segmentioItems.count endPointWithVerticalSeparator.x = endPoint.x - (isLastItem ? 0 : 1) let shapeLayerPath = UIBezierPath() - shapeLayerPath.moveToPoint(startPoint) - shapeLayerPath.addLineToPoint(endPointWithVerticalSeparator) + shapeLayerPath.move(to: startPoint) + shapeLayerPath.addLine(to: endPointWithVerticalSeparator) if animated == true { isPerformingScrollAnimation = true - userInteractionEnabled = false + isUserInteractionEnabled = false CATransaction.begin() let animation = CABasicAnimation(keyPath: "path") animation.fromValue = shapeLayer.path - animation.toValue = shapeLayerPath.CGPath + animation.toValue = shapeLayerPath.cgPath animation.duration = animationDuration CATransaction.setCompletionBlock() { self.isPerformingScrollAnimation = false - self.userInteractionEnabled = true + self.isUserInteractionEnabled = true } - shapeLayer.addAnimation(animation, forKey: "path") + shapeLayer.add(animation, forKey: "path") CATransaction.commit() } - shapeLayer.path = shapeLayerPath.CGPath + shapeLayer.path = shapeLayerPath.cgPath } // MARK: - Context for item - private func contextForItem(item: ItemInSuperview) -> Context { + fileprivate func contextForItem(_ item: ItemInSuperview) -> Context { let cellFrame = item.cellFrameInSuperview let cellWidth = cellFrame.width let lastCellMinX = floor(item.collectionViewWidth - cellWidth) @@ -476,10 +476,10 @@ public class Segmentio: UIView { // MARK: - Item in superview - private func itemInSuperview(ratio ratio: CGFloat = 1) -> ItemInSuperview { + fileprivate func itemInSuperview(ratio: CGFloat = 1) -> ItemInSuperview { var collectionViewWidth: CGFloat = 0 var cellWidth: CGFloat = 0 - var cellRect = CGRectZero + var cellRect = CGRect.zero var shapeLayerWidth: CGFloat = 0 if let collectionView = segmentioCollectionView { @@ -508,7 +508,7 @@ public class Segmentio: UIView { // MARK: - Indicator point Y - private func indicatorPointY() -> CGFloat { + fileprivate func indicatorPointY() -> CGFloat { var indicatorPointY: CGFloat = 0 guard let indicatorOptions = segmentioOptions.indicatorOptions else { @@ -516,9 +516,9 @@ public class Segmentio: UIView { } switch indicatorOptions.type { - case .Top: + case .top: indicatorPointY = (indicatorOptions.height / 2) - case .Bottom: + case .bottom: indicatorPointY = frame.height - (indicatorOptions.height / 2) } @@ -527,14 +527,14 @@ public class Segmentio: UIView { } let separatorHeight = horizontalSeparatorOptions.height - let isIndicatorTop = indicatorOptions.type == .Top + let isIndicatorTop = indicatorOptions.type == .top switch horizontalSeparatorOptions.type { - case .Top: + case .top: indicatorPointY = isIndicatorTop ? indicatorPointY + separatorHeight : indicatorPointY - case .Bottom: + case .bottom: indicatorPointY = isIndicatorTop ? indicatorPointY : indicatorPointY - separatorHeight - case .TopAndBottom: + case .topAndBottom: indicatorPointY = isIndicatorTop ? indicatorPointY + separatorHeight : indicatorPointY - separatorHeight } @@ -546,23 +546,23 @@ public class Segmentio: UIView { extension Segmentio: UICollectionViewDataSource { - public func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { + public func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { return segmentioItems.count ?? 0 } - public func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { - let cell = collectionView.dequeueReusableCellWithReuseIdentifier( - segmentioStyle.rawValue, - forIndexPath: indexPath) as! SegmentioCell + public func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { + let cell = collectionView.dequeueReusableCell( + withReuseIdentifier: segmentioStyle.rawValue, + for: indexPath) as! SegmentioCell cell.configure( - content: segmentioItems[indexPath.row], + content: segmentioItems[(indexPath as NSIndexPath).row], style: segmentioStyle, options: segmentioOptions, - isLastCell: indexPath.row == segmentioItems.count - 1 + isLastCell: (indexPath as NSIndexPath).row == segmentioItems.count - 1 ) - cell.configure(selected: (indexPath.row == selectedSegmentioIndex)) + cell.configure(selected: ((indexPath as NSIndexPath).row == selectedSegmentioIndex)) return cell } @@ -573,12 +573,12 @@ extension Segmentio: UICollectionViewDataSource { extension Segmentio: UICollectionViewDelegate { - public func collectionView(collectionView: UICollectionView, shouldSelectItemAtIndexPath indexPath: NSIndexPath) -> Bool { + public func collectionView(_ collectionView: UICollectionView, shouldSelectItemAt indexPath: IndexPath) -> Bool { return true } - public func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) { - selectedSegmentioIndex = indexPath.row + public func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { + selectedSegmentioIndex = (indexPath as NSIndexPath).row } } @@ -587,7 +587,7 @@ extension Segmentio: UICollectionViewDelegate { extension Segmentio: UICollectionViewDelegateFlowLayout { - public func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize { + public func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { let maxVisibleItems = segmentioOptions.maxVisibleItems > segmentioItems.count ? CGFloat(segmentioItems.count) : CGFloat(segmentioOptions.maxVisibleItems) return CGSize( width: floor(collectionView.frame.width / maxVisibleItems), @@ -601,17 +601,17 @@ extension Segmentio: UICollectionViewDelegateFlowLayout { extension Segmentio: UIScrollViewDelegate { - public func scrollViewDidScroll(scrollView: UIScrollView) { + public func scrollViewDidScroll(_ scrollView: UIScrollView) { if isPerformingScrollAnimation == true { return } - if let options = segmentioOptions.indicatorOptions, indicatorLayer = indicatorLayer { + if let options = segmentioOptions.indicatorOptions, let indicatorLayer = indicatorLayer { let item = itemInSuperview(ratio: options.ratio) moveShapeLayer( indicatorLayer, - startPoint: CGPointMake(item.startX, indicatorPointY()), - endPoint: CGPointMake(item.endX, indicatorPointY()), + startPoint: CGPoint(x: item.startX, y: indicatorPointY()), + endPoint: CGPoint(x: item.endX, y: indicatorPointY()), animated: false ) } @@ -667,4 +667,4 @@ extension Segmentio.Points { endPoint = CGPoint(x: endX, y: pointY) } -} \ No newline at end of file +} diff --git a/Segmentio/Source/SegmentioOptions.swift b/Segmentio/Source/SegmentioOptions.swift index 540f617..ebf4ffb 100644 --- a/Segmentio/Source/SegmentioOptions.swift +++ b/Segmentio/Source/SegmentioOptions.swift @@ -21,7 +21,7 @@ public struct SegmentioItem { self.image = image } - public mutating func setupBadgeWithCount(count: Int, color: UIColor = .redColor()) { + public mutating func setupBadgeWithCount(_ count: Int, color: UIColor = .red) { self.badgeCount = count self.badgeColor = color } @@ -41,9 +41,9 @@ public struct SegmentioState { var titleTextColor: UIColor public init( - backgroundColor: UIColor = UIColor.clearColor(), - titleFont: UIFont = UIFont.systemFontOfSize(UIFont.smallSystemFontSize()), - titleTextColor: UIColor = UIColor.blackColor()) { + backgroundColor: UIColor = UIColor.clear, + titleFont: UIFont = UIFont.systemFont(ofSize: UIFont.smallSystemFontSize), + titleTextColor: UIColor = UIColor.black) { self.backgroundColor = backgroundColor self.titleFont = titleFont self.titleTextColor = titleTextColor @@ -54,7 +54,7 @@ public struct SegmentioState { // MARK: - Horizontal separator public enum SegmentioHorizontalSeparatorType { - case Top, Bottom, TopAndBottom + case top, bottom, topAndBottom } public struct SegmentioHorizontalSeparatorOptions { @@ -63,9 +63,9 @@ public struct SegmentioHorizontalSeparatorOptions { var color: UIColor public init( - type: SegmentioHorizontalSeparatorType = .TopAndBottom, + type: SegmentioHorizontalSeparatorType = .topAndBottom, height: CGFloat = 1.0, - color: UIColor = UIColor.darkGrayColor()) { + color: UIColor = UIColor.darkGray) { self.type = type self.height = height self.color = color @@ -79,7 +79,7 @@ public struct SegmentioVerticalSeparatorOptions { var ratio: CGFloat var color: UIColor - public init(ratio: CGFloat = 1.0, color: UIColor = UIColor.darkGrayColor()) { + public init(ratio: CGFloat = 1.0, color: UIColor = UIColor.darkGray) { self.ratio = ratio self.color = color } @@ -89,7 +89,7 @@ public struct SegmentioVerticalSeparatorOptions { // MARK: - Indicator public enum SegmentioIndicatorType { - case Top, Bottom + case top, bottom } public struct SegmentioIndicatorOptions { @@ -99,10 +99,10 @@ public struct SegmentioIndicatorOptions { var color: UIColor public init( - type: SegmentioIndicatorType = .Bottom, + type: SegmentioIndicatorType = .bottom, ratio: CGFloat = 1.0, height: CGFloat = 2.0, - color: UIColor = UIColor.orangeColor()) { + color: UIColor = UIColor.orange) { self.type = type self.ratio = ratio self.height = height @@ -158,7 +158,7 @@ public struct SegmentioOptions { var states: SegmentioStates public init() { - self.backgroundColor = UIColor.lightGrayColor() + self.backgroundColor = UIColor.lightGray self.maxVisibleItems = 4 self.scrollEnabled = true @@ -167,8 +167,8 @@ public struct SegmentioOptions { self.indicatorOptions = SegmentioIndicatorOptions() - self.imageContentMode = .Center - self.labelTextAlignment = .Center + self.imageContentMode = .center + self.labelTextAlignment = .center self.states = SegmentioStates( defaultState: SegmentioState(), @@ -189,4 +189,4 @@ public struct SegmentioOptions { self.states = segmentStates } -} \ No newline at end of file +}