diff --git a/ScrollPager.xcodeproj/project.pbxproj b/ScrollPager.xcodeproj/project.pbxproj index 384c7f3..eec24e8 100644 --- a/ScrollPager.xcodeproj/project.pbxproj +++ b/ScrollPager.xcodeproj/project.pbxproj @@ -169,17 +169,17 @@ attributes = { LastSwiftMigration = 0700; LastSwiftUpdateCheck = 0700; - LastUpgradeCheck = 0800; + LastUpgradeCheck = 0920; ORGANIZATIONNAME = "Aryan Ghassemi"; TargetAttributes = { 15F9717A1A9A86E400169B7E = { CreatedOnToolsVersion = 6.1.1; DevelopmentTeam = 24FGDP9KJW; - LastSwiftMigration = 0800; + LastSwiftMigration = 0920; }; 15F9718F1A9A86E400169B7E = { CreatedOnToolsVersion = 6.1.1; - LastSwiftMigration = 0800; + LastSwiftMigration = 0920; TestTargetID = 15F9717A1A9A86E400169B7E; }; }; @@ -280,14 +280,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; @@ -327,14 +333,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; @@ -368,7 +380,8 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "com.aryaxt.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 3.0; + SWIFT_SWIFT3_OBJC_INFERENCE = On; + SWIFT_VERSION = 4.0; }; name = Debug; }; @@ -381,7 +394,8 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "com.aryaxt.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 3.0; + SWIFT_SWIFT3_OBJC_INFERENCE = On; + SWIFT_VERSION = 4.0; }; name = Release; }; @@ -401,7 +415,8 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "com.aryaxt.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 3.0; + SWIFT_SWIFT3_OBJC_INFERENCE = On; + SWIFT_VERSION = 4.0; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/ScrollPager.app/ScrollPager"; }; name = Debug; @@ -418,7 +433,8 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "com.aryaxt.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 3.0; + SWIFT_SWIFT3_OBJC_INFERENCE = On; + SWIFT_VERSION = 4.0; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/ScrollPager.app/ScrollPager"; }; name = Release; diff --git a/ScrollPager.xcodeproj/project.xcworkspace/xcuserdata/datainventsystems.xcuserdatad/UserInterfaceState.xcuserstate b/ScrollPager.xcodeproj/project.xcworkspace/xcuserdata/datainventsystems.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000..4d71435 Binary files /dev/null and b/ScrollPager.xcodeproj/project.xcworkspace/xcuserdata/datainventsystems.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/ScrollPager.xcodeproj/xcshareddata/xcschemes/ScrollPager.xcscheme b/ScrollPager.xcodeproj/xcshareddata/xcschemes/ScrollPager.xcscheme index 19cd6ca..805e77e 100644 --- a/ScrollPager.xcodeproj/xcshareddata/xcschemes/ScrollPager.xcscheme +++ b/ScrollPager.xcodeproj/xcshareddata/xcschemes/ScrollPager.xcscheme @@ -1,6 +1,6 @@ UIView? { + guard index < views.count else { + return nil + } + return views[index] + } // MARK: - Private - - private func setSelectedIndex(index: Int, animated: Bool, moveScrollView: Bool) { + private func setSelectedIndex(_ index: Int, animated: Bool, moveScrollView: Bool) { selectedIndex = index - moveToIndex(index: index, animated: animated, moveScrollView: moveScrollView) + move(to: index, animated: animated, moveScrollView: moveScrollView) } - private func addViews(segmentViews: [UIView]) { + private func addViews(_ segmentViews: [UIView]) { guard let scrollView = scrollView else { fatalError("trying to add views but the scrollView is nil") } for view in scrollView.subviews { @@ -172,7 +179,7 @@ import UIKit } } - private func addButtons(titleOrImages: [AnyObject]) { + private func addButtons(_ titleOrImages: [AnyObject]) { for button in buttons { button.removeFromSuperview() } @@ -182,7 +189,7 @@ import UIKit for i in 0.. 0 { - moveToIndex(index: selectedIndex, animated: false, moveScrollView: false) + move(to: selectedIndex, animated: false, moveScrollView: false) } if let scrollView = scrollView { @@ -266,14 +273,15 @@ import UIKit } } - internal func buttonSelected(sender: UIButton) { + @objc internal func buttonSelected(_ sender: UIButton) { if sender.tag == selectedIndex { return } + // change the selected index + setSelectedIndex(sender.tag, animated: true, moveScrollView: true) + // notify the delegate that index has changed + delegate?.scrollPager?(self, changedIndex: sender.tag) - delegate?.scrollPager?(scrollPager: self, changedIndex: sender.tag) - - setSelectedIndex(index: sender.tag, animated: true, moveScrollView: true) } // MARK: - UIScrollView Delegate - @@ -287,8 +295,8 @@ import UIKit } if Int(page) != selectedIndex { - setSelectedIndex(index: Int(page), animated: true, moveScrollView: false) - delegate?.scrollPager?(scrollPager: self, changedIndex: Int(page)) + setSelectedIndex(Int(page), animated: true, moveScrollView: false) + delegate?.scrollPager?(self, changedIndex: Int(page)) } } } diff --git a/ScrollPager/ViewController.swift b/ScrollPager/ViewController.swift index 910c006..10f75ae 100644 --- a/ScrollPager/ViewController.swift +++ b/ScrollPager/ViewController.swift @@ -37,14 +37,14 @@ class ViewController: UIViewController, ScrollPagerDelegate { fourthView.textAlignment = .center scrollPager.delegate = self - scrollPager.addSegmentsWithTitlesAndViews(segments: [ + scrollPager.addSegments(with: [ ("Home", firstView), ("Public Feed", secondView), ("Profile", thirdView), ("One More", fourthView) ]) - secondScrollPager.addSegmentsWithImages(segmentImages: [ + secondScrollPager.addSegments(with: [ UIImage(named: "envelope")!, UIImage(named: "home")!, UIImage(named: "like")!,