Skip to content

Commit

Permalink
Merge pull request #49 from hyperoslo/swift4
Browse files Browse the repository at this point in the history
Migrate the project to Swift 4
  • Loading branch information
vadymmarkov authored Oct 2, 2017
2 parents ba37d38 + 77a1ede commit 83b4e3b
Show file tree
Hide file tree
Showing 6 changed files with 83 additions and 62 deletions.
2 changes: 1 addition & 1 deletion .swift-version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
3.0
4.0
2 changes: 1 addition & 1 deletion Pages.podspec
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
Pod::Spec.new do |s|
s.name = "Pages"
s.summary = "UIPageViewController made simple"
s.version = "1.0.0"
s.version = "2.0.0"
s.homepage = "https://github.com/hyperoslo/Pages"
s.license = 'MIT'
s.author = { "Hyper" => "[email protected]" }
Expand Down
22 changes: 18 additions & 4 deletions Pages.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -104,12 +104,12 @@
isa = PBXProject;
attributes = {
LastSwiftUpdateCheck = 0720;
LastUpgradeCheck = 0800;
LastUpgradeCheck = 0900;
ORGANIZATIONNAME = "Hyper Interaktiv AS";
TargetAttributes = {
D5DF754B1C401B1800BF1AB6 = {
CreatedOnToolsVersion = 7.2;
LastSwiftMigration = 0800;
LastSwiftMigration = 0900;
};
};
};
Expand Down Expand Up @@ -162,14 +162,20 @@
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
Expand Down Expand Up @@ -212,14 +218,20 @@
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
Expand Down Expand Up @@ -263,7 +275,8 @@
PRODUCT_BUNDLE_IDENTIFIER = no.hyper.Pages;
PRODUCT_NAME = Pages;
SKIP_INSTALL = YES;
SWIFT_VERSION = 3.0;
SWIFT_SWIFT3_OBJC_INFERENCE = Default;
SWIFT_VERSION = 4.0;
};
name = Debug;
};
Expand All @@ -282,7 +295,8 @@
PRODUCT_BUNDLE_IDENTIFIER = no.hyper.Pages;
PRODUCT_NAME = Pages;
SKIP_INSTALL = YES;
SWIFT_VERSION = 3.0;
SWIFT_SWIFT3_OBJC_INFERENCE = Default;
SWIFT_VERSION = 4.0;
};
name = Release;
};
Expand Down
4 changes: 3 additions & 1 deletion Pages.xcodeproj/xcshareddata/xcschemes/Pages-iOS.xcscheme
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0800"
LastUpgradeVersion = "0900"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
Expand All @@ -26,6 +26,7 @@
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
language = ""
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
Expand All @@ -36,6 +37,7 @@
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
language = ""
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
Expand Down
1 change: 0 additions & 1 deletion Source/Array+Sugar.swift
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
extension Array {

func at(_ index: Int?) -> Element? {
if let index = index , index >= 0 && index < endIndex {
return self[index]
Expand Down
114 changes: 60 additions & 54 deletions Source/PagesController.swift
Original file line number Diff line number Diff line change
@@ -1,65 +1,65 @@
import UIKit

@objc(HYPPagesControllerDelegate) public protocol PagesControllerDelegate {

func pageViewController(_ pageViewController: UIPageViewController, setViewController viewController: UIViewController, atPage page: Int)
func pageViewController(_ pageViewController: UIPageViewController,
setViewController viewController: UIViewController,
atPage page: Int)
}

@objc(HYPPagesController) open class PagesController: UIPageViewController {

struct Dimensions {
private struct Dimensions {
static let bottomLineHeight: CGFloat = 1.0
static let bottomLineSideMargin: CGFloat = 40.0
static let bottomLineBottomMargin: CGFloat = 36.0
}

open var startPage = 0
open var setNavigationTitle = true
public var startPage = 0
public var setNavigationTitle = true

open var enableSwipe = true {
public var enableSwipe = true {
didSet {
toggle()
}
}

open var showBottomLine = false {
public var showBottomLine = false {
didSet {
bottomLineView.isHidden = !showBottomLine
}
}

open var showPageControl = true
public var showPageControl = true
private lazy var pages = Array<UIViewController>()

lazy var pages = Array<UIViewController>()

open var pagesCount: Int {
public var pagesCount: Int {
return pages.count
}

open fileprivate(set) var currentIndex = 0

open weak var pagesDelegate: PagesControllerDelegate?
public private(set) var currentIndex = 0
public weak var pagesDelegate: PagesControllerDelegate?

open fileprivate(set) lazy var bottomLineView: UIView = {
public private(set) lazy var bottomLineView: UIView = {
let view = UIView()
view.translatesAutoresizingMaskIntoConstraints = false
view.backgroundColor = UIColor.white
view.alpha = 0.4
view.isHidden = true
return view
}()
}()

open fileprivate(set) var pageControl: UIPageControl?
public private(set) var pageControl: UIPageControl?

public convenience init(_ pages: [UIViewController],
transitionStyle: UIPageViewControllerTransitionStyle = .scroll,
navigationOrientation: UIPageViewControllerNavigationOrientation = .horizontal,
options: [String : AnyObject]? = nil) {
self.init(transitionStyle: transitionStyle,
navigationOrientation: navigationOrientation,
options: options)
transitionStyle: UIPageViewControllerTransitionStyle = .scroll,
navigationOrientation: UIPageViewControllerNavigationOrientation = .horizontal,
options: [String : AnyObject]? = nil) {
self.init(
transitionStyle: transitionStyle,
navigationOrientation: navigationOrientation,
options: options
)

add(pages)
add(pages)
}

open override func viewDidLoad() {
Expand All @@ -85,9 +85,9 @@ import UIKit
}
}

// MARK: Public methods
extension PagesController {
// MARK: - Public methods

extension PagesController {
open func goTo(_ index: Int) {
if index >= 0 && index < pages.count {
let direction: UIPageViewControllerNavigationDirection = (index > currentIndex) ? .forward : .reverse
Expand Down Expand Up @@ -122,16 +122,17 @@ extension PagesController {
}
}

// MARK: UIPageViewControllerDataSource
// MARK: - UIPageViewControllerDataSource

extension PagesController : UIPageViewControllerDataSource {

open func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
open func pageViewController(_ pageViewController: UIPageViewController,
viewControllerBefore viewController: UIViewController) -> UIViewController? {
let index = prevIndex(viewControllerIndex(viewController))
return pages.at(index)
}

open func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
open func pageViewController(_ pageViewController: UIPageViewController,
viewControllerAfter viewController: UIViewController) -> UIViewController? {
let index: Int? = nextIndex(viewControllerIndex(viewController))
return pages.at(index)
}
Expand All @@ -145,40 +146,47 @@ extension PagesController : UIPageViewControllerDataSource {
}
}

// MARK: UIPageViewControllerDelegate
// MARK: - UIPageViewControllerDelegate

extension PagesController : UIPageViewControllerDelegate {
open func pageViewController(_ pageViewController: UIPageViewController,
didFinishAnimating finished: Bool,
previousViewControllers: [UIViewController],
transitionCompleted completed: Bool) {
guard completed else {
return
}

open func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool,
previousViewControllers: [UIViewController], transitionCompleted completed: Bool) {
if completed {
if let viewController = pageViewController.viewControllers?.last,
let index = viewControllerIndex(viewController) {
currentIndex = index
guard let viewController = pageViewController.viewControllers?.last else {
return
}

if setNavigationTitle {
title = viewController.title
}
guard let index = viewControllerIndex(viewController) else {
return
}

if let pageControl = pageControl {
pageControl.currentPage = currentIndex
}
currentIndex = index

pagesDelegate?.pageViewController(self, setViewController: pages[currentIndex], atPage: currentIndex)
}
if setNavigationTitle {
title = viewController.title
}

if let pageControl = pageControl {
pageControl.currentPage = currentIndex
}

pagesDelegate?.pageViewController(self, setViewController: pages[currentIndex], atPage: currentIndex)
}
}

// MARK: Private methods
// MARK: - Private methods

extension PagesController {

func viewControllerIndex(_ viewController: UIViewController) -> Int? {
return pages.index(of: viewController)
}

fileprivate func toggle() {
private func toggle() {
for subview in view.subviews {
if let subview = subview as? UIScrollView {
subview.isScrollEnabled = enableSwipe
Expand All @@ -187,7 +195,7 @@ extension PagesController {
}
}

fileprivate func addViewController(_ viewController: UIViewController) {
private func addViewController(_ viewController: UIViewController) {
pages.append(viewController)

if pages.count == 1 {
Expand All @@ -205,7 +213,7 @@ extension PagesController {
}
}

fileprivate func addConstraints() {
private func addConstraints() {
view.addConstraint(NSLayoutConstraint(item: bottomLineView, attribute: .bottom,
relatedBy: .equal, toItem: view, attribute: .bottom,
multiplier: 1, constant: -Dimensions.bottomLineBottomMargin))
Expand All @@ -227,10 +235,8 @@ extension PagesController {
// MARK: Storyboard

extension PagesController {

public convenience init(_ storyboardIds: [String], storyboard: UIStoryboard = UIStoryboard.Main) {
public convenience init(_ storyboardIds: [String], storyboard: UIStoryboard = .Main) {
let pages = storyboardIds.map(storyboard.instantiateViewController(withIdentifier:))
self.init(pages)
}
}

0 comments on commit 83b4e3b

Please sign in to comment.