From 21c6e1a7f4bc9b49d1d7596100ed43a638a15ace Mon Sep 17 00:00:00 2001 From: Daniel van Hoesel Date: Mon, 22 Jun 2015 14:30:02 +0200 Subject: [PATCH 01/36] Trigger `viewWillAppear` on mainViewController when SlideMenuController appears on screen --- Source/SlideMenuController.swift | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Source/SlideMenuController.swift b/Source/SlideMenuController.swift index 530689c..6b47a73 100644 --- a/Source/SlideMenuController.swift +++ b/Source/SlideMenuController.swift @@ -154,6 +154,11 @@ class SlideMenuController: UIViewController, UIGestureRecognizerDelegate { super.viewDidLoad() edgesForExtendedLayout = UIRectEdge.None } + + override func viewWillAppear(animated: Bool) { + super.viewWillAppear(animated) + self.mainViewController?.viewWillAppear(animated) + } override func viewWillLayoutSubviews() { // topLayoutGuideの値が確定するこのタイミングで各種ViewControllerをセットする From 52fd892bcd9b298e87eddd3b86a7f232ce9df2ac Mon Sep 17 00:00:00 2001 From: Scott Bates Date: Fri, 12 Aug 2016 06:22:34 -0700 Subject: [PATCH 02/36] Adding new SlideMenuOptions booleans to allow disabling of pan or tap gestures --- Source/SlideMenuController.swift | 42 ++++++++++++++++++++------------ 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/Source/SlideMenuController.swift b/Source/SlideMenuController.swift index 272fbd5..a6542bb 100644 --- a/Source/SlideMenuController.swift +++ b/Source/SlideMenuController.swift @@ -36,6 +36,8 @@ public struct SlideMenuOptions { public static var pointOfNoReturnWidth: CGFloat = 44.0 public static var simultaneousGestureRecognizers: Bool = true public static var opacityViewBackgroundColor: UIColor = UIColor.blackColor() + public static var panGesturesEnabled: Bool = true + public static var tapGesturesEnabled: Bool = true } public class SlideMenuController: UIViewController, UIGestureRecognizerDelegate { @@ -262,16 +264,20 @@ public class SlideMenuController: UIViewController, UIGestureRecognizerDelegate public func addLeftGestures() { if (leftViewController != nil) { - if leftPanGesture == nil { - leftPanGesture = UIPanGestureRecognizer(target: self, action: #selector(self.handleLeftPanGesture(_:))) - leftPanGesture!.delegate = self - view.addGestureRecognizer(leftPanGesture!) + if (SlideMenuOptions.panGesturesEnabled) { + if leftPanGesture == nil { + leftPanGesture = UIPanGestureRecognizer(target: self, action: #selector(self.handleLeftPanGesture(_:))) + leftPanGesture!.delegate = self + view.addGestureRecognizer(leftPanGesture!) + } } - if leftTapGesture == nil { - leftTapGesture = UITapGestureRecognizer(target: self, action: #selector(self.toggleLeft)) - leftTapGesture!.delegate = self - view.addGestureRecognizer(leftTapGesture!) + if (SlideMenuOptions.tapGesturesEnabled) { + if leftTapGesture == nil { + leftTapGesture = UITapGestureRecognizer(target: self, action: #selector(self.toggleLeft)) + leftTapGesture!.delegate = self + view.addGestureRecognizer(leftTapGesture!) + } } } } @@ -279,16 +285,20 @@ public class SlideMenuController: UIViewController, UIGestureRecognizerDelegate public func addRightGestures() { if (rightViewController != nil) { - if rightPanGesture == nil { - rightPanGesture = UIPanGestureRecognizer(target: self, action: #selector(self.handleRightPanGesture(_:))) - rightPanGesture!.delegate = self - view.addGestureRecognizer(rightPanGesture!) + if (SlideMenuOptions.panGesturesEnabled) { + if rightPanGesture == nil { + rightPanGesture = UIPanGestureRecognizer(target: self, action: #selector(self.handleRightPanGesture(_:))) + rightPanGesture!.delegate = self + view.addGestureRecognizer(rightPanGesture!) + } } - if rightTapGesture == nil { - rightTapGesture = UITapGestureRecognizer(target: self, action: #selector(self.toggleRight)) - rightTapGesture!.delegate = self - view.addGestureRecognizer(rightTapGesture!) + if (SlideMenuOptions.tapGesturesEnabled) { + if rightTapGesture == nil { + rightTapGesture = UITapGestureRecognizer(target: self, action: #selector(self.toggleRight)) + rightTapGesture!.delegate = self + view.addGestureRecognizer(rightTapGesture!) + } } } } From 072e2e243ced3bdd40f78fb92b18ade2e0b13155 Mon Sep 17 00:00:00 2001 From: dekatotoro Date: Mon, 12 Sep 2016 11:08:12 +0900 Subject: [PATCH 03/36] Update sample project. --- SlideMenuControllerSwift/Info.plist | 11 +++++++++++ SlideMenuControllerSwift/UIImageView.swift | 2 +- Source/SlideMenuController.swift | 2 +- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/SlideMenuControllerSwift/Info.plist b/SlideMenuControllerSwift/Info.plist index 5da0369..fab810f 100644 --- a/SlideMenuControllerSwift/Info.plist +++ b/SlideMenuControllerSwift/Info.plist @@ -44,5 +44,16 @@ UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight + NSAppTransportSecurity + + NSExceptionDomains + + lorempixel.com + + NSTemporaryExceptionAllowsInsecureHTTPLoads + + + + diff --git a/SlideMenuControllerSwift/UIImageView.swift b/SlideMenuControllerSwift/UIImageView.swift index 4d89070..600acdb 100644 --- a/SlideMenuControllerSwift/UIImageView.swift +++ b/SlideMenuControllerSwift/UIImageView.swift @@ -17,7 +17,7 @@ extension UIImageView { return } self.alpha = 0 - let url = NSURL(string: "https://ssl.webpack.de/lorempixel.com/\(width)/\(height)/")! + let url = NSURL(string: "http://lorempixel.com/\(width)/\(height)/")! let configuration = NSURLSessionConfiguration.defaultSessionConfiguration() configuration.timeoutIntervalForRequest = 15 configuration.timeoutIntervalForResource = 15 diff --git a/Source/SlideMenuController.swift b/Source/SlideMenuController.swift index 588be02..f212d8d 100644 --- a/Source/SlideMenuController.swift +++ b/Source/SlideMenuController.swift @@ -187,7 +187,7 @@ public class SlideMenuController: UIViewController, UIGestureRecognizerDelegate edgesForExtendedLayout = UIRectEdge.None } - override func viewWillAppear(animated: Bool) { + override public func viewWillAppear(animated: Bool) { super.viewWillAppear(animated) self.mainViewController?.viewWillAppear(animated) } From 1cc8e63e906788d9fe2ee6c87e8e2158a7cf817c Mon Sep 17 00:00:00 2001 From: dekatotoro Date: Mon, 12 Sep 2016 11:15:06 +0900 Subject: [PATCH 04/36] Update podspec and CHANGELOG. --- CHANGELOG.md | 10 ++++++++++ SlideMenuControllerSwift.podspec | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cdeb175..e4be224 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,13 @@ +2.2.3 Release notes (2016-09-12) +============================================================= + +### Enhancements +* None. + +### Bugfixes +* Added viewWillAppear on mainViewController when SlideMenuController appears on screen +* Fixes sample project image. + 2.2.2 Release notes (2016-07-15) ============================================================= diff --git a/SlideMenuControllerSwift.podspec b/SlideMenuControllerSwift.podspec index b783edd..16d31f8 100644 --- a/SlideMenuControllerSwift.podspec +++ b/SlideMenuControllerSwift.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = "SlideMenuControllerSwift" - s.version = "2.2.2" + s.version = "2.2.3" s.summary = "iOS Slide View based on iQON, Feedly, Google+, Ameba iPhone app." s.homepage = "https://github.com/dekatotoro/SlideMenuControllerSwift" s.license = { :type => "MIT", :file => "LICENSE" } From 0e5c20ad17c9b83b74fd57819acc8a25766a8c5e Mon Sep 17 00:00:00 2001 From: dekatotoro Date: Mon, 12 Sep 2016 12:53:36 +0900 Subject: [PATCH 05/36] Update to Swift2.3 --- .../project.pbxproj | 29 +++++++++++++------ .../SlideMenuControllerSwift-iOS.xcscheme | 2 +- .../SlideMenuControllerSwift.xcscheme | 2 +- SlideMenuControllerSwift/UIImage.swift | 4 +-- SlideMenuControllerSwift/UIView.swift | 2 +- 5 files changed, 25 insertions(+), 14 deletions(-) diff --git a/SlideMenuControllerSwift.xcodeproj/project.pbxproj b/SlideMenuControllerSwift.xcodeproj/project.pbxproj index 951ac31..b8d5f39 100644 --- a/SlideMenuControllerSwift.xcodeproj/project.pbxproj +++ b/SlideMenuControllerSwift.xcodeproj/project.pbxproj @@ -323,7 +323,7 @@ attributes = { LastSwiftMigration = 0700; LastSwiftUpdateCheck = 0700; - LastUpgradeCheck = 0710; + LastUpgradeCheck = 0800; ORGANIZATIONNAME = "Yuji Hato"; TargetAttributes = { 0E75C5951BE3CA7900844634 = { @@ -331,9 +331,11 @@ }; C539E6401A315E87003B7CC7 = { CreatedOnToolsVersion = 6.1.1; + LastSwiftMigration = 0800; }; C539E6581A315E87003B7CC7 = { CreatedOnToolsVersion = 6.1.1; + LastSwiftMigration = 0800; TestTargetID = C539E6401A315E87003B7CC7; }; }; @@ -469,6 +471,7 @@ 0E75C59F1BE3CA7900844634 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = dwarf; DEFINES_MODULE = YES; @@ -492,6 +495,7 @@ 0E75C5A01BE3CA7900844634 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; @@ -525,8 +529,10 @@ 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_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -535,6 +541,7 @@ ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", @@ -552,6 +559,7 @@ ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 2.3; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; @@ -569,8 +577,10 @@ 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_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -578,6 +588,7 @@ ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; @@ -587,6 +598,8 @@ IPHONEOS_DEPLOYMENT_TARGET = 8.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 2.3; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; }; @@ -601,6 +614,7 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "dekatotoro.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 2.3; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; @@ -614,6 +628,7 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "dekatotoro.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 2.3; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Release; @@ -622,10 +637,7 @@ isa = XCBuildConfiguration; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - ); + FRAMEWORK_SEARCH_PATHS = "$(inherited)"; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", @@ -634,6 +646,7 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "dekatotoro.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 2.3; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/SlideMenuControllerSwift.app/SlideMenuControllerSwift"; }; name = Debug; @@ -642,14 +655,12 @@ isa = XCBuildConfiguration; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - ); + FRAMEWORK_SEARCH_PATHS = "$(inherited)"; INFOPLIST_FILE = SlideMenuControllerSwiftTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "dekatotoro.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 2.3; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/SlideMenuControllerSwift.app/SlideMenuControllerSwift"; }; name = Release; diff --git a/SlideMenuControllerSwift.xcodeproj/xcshareddata/xcschemes/SlideMenuControllerSwift-iOS.xcscheme b/SlideMenuControllerSwift.xcodeproj/xcshareddata/xcschemes/SlideMenuControllerSwift-iOS.xcscheme index 2a00476..5237a5f 100644 --- a/SlideMenuControllerSwift.xcodeproj/xcshareddata/xcschemes/SlideMenuControllerSwift-iOS.xcscheme +++ b/SlideMenuControllerSwift.xcodeproj/xcshareddata/xcschemes/SlideMenuControllerSwift-iOS.xcscheme @@ -1,6 +1,6 @@ UIImage { if CGRectContainsRect(CGRect(origin: CGPointZero, size: self.size), trimRect) { - if let imageRef = CGImageCreateWithImageInRect(self.CGImage, trimRect) { + if let imageRef = CGImageCreateWithImageInRect(self.CGImage!, trimRect) { return UIImage(CGImage: imageRef) } } @@ -25,4 +25,4 @@ extension UIImage { return image } -} \ No newline at end of file +} diff --git a/SlideMenuControllerSwift/UIView.swift b/SlideMenuControllerSwift/UIView.swift index 918abc2..944673c 100644 --- a/SlideMenuControllerSwift/UIView.swift +++ b/SlideMenuControllerSwift/UIView.swift @@ -11,7 +11,7 @@ import UIKit extension UIView { class func loadNib(viewType: T.Type) -> T { let className = String.className(viewType) - return NSBundle(forClass: viewType).loadNibNamed(className, owner: nil, options: nil).first as! T + return NSBundle(forClass: viewType).loadNibNamed(className, owner: nil, options: nil)!.first as! T } class func loadNib() -> Self { From 3fe58994a0178546b40c2fb4780e2e066ac680e1 Mon Sep 17 00:00:00 2001 From: dekatotoro Date: Mon, 12 Sep 2016 12:55:32 +0900 Subject: [PATCH 06/36] Fixed stooryboard warning. --- .../Base.lproj/Main.storyboard | 74 ++++++++----------- 1 file changed, 32 insertions(+), 42 deletions(-) diff --git a/SlideMenuControllerSwift/Base.lproj/Main.storyboard b/SlideMenuControllerSwift/Base.lproj/Main.storyboard index 1b5e49b..fcb7db9 100644 --- a/SlideMenuControllerSwift/Base.lproj/Main.storyboard +++ b/SlideMenuControllerSwift/Base.lproj/Main.storyboard @@ -1,8 +1,9 @@ - + - + + @@ -18,24 +19,23 @@ - - + + + @@ -54,18 +54,15 @@ - - - - + + - - + @@ -96,17 +93,14 @@ - - - + - - + @@ -114,6 +108,8 @@ + + @@ -134,25 +130,24 @@ - - + + + @@ -171,25 +166,24 @@ - - + + + @@ -208,25 +202,24 @@ - - + + + @@ -245,35 +238,30 @@ - - + @@ -281,6 +269,8 @@ + + From e4a268afadcccd0bb2bbe7617d9b2d0b85ab8a8b Mon Sep 17 00:00:00 2001 From: dekatotoro Date: Mon, 12 Sep 2016 12:58:32 +0900 Subject: [PATCH 07/36] Update podspec and CHANGELOG. --- CHANGELOG.md | 10 ++++++++++ SlideMenuControllerSwift.podspec | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e4be224..a49408d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,13 @@ +2.3.0 Release notes (2016-09-12) +============================================================= + +### Enhancements +* Support Swift2.3 + +### Bugfixes +* None. + + 2.2.3 Release notes (2016-09-12) ============================================================= diff --git a/SlideMenuControllerSwift.podspec b/SlideMenuControllerSwift.podspec index 16d31f8..bead23b 100644 --- a/SlideMenuControllerSwift.podspec +++ b/SlideMenuControllerSwift.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = "SlideMenuControllerSwift" - s.version = "2.2.3" + s.version = "2.3.0" s.summary = "iOS Slide View based on iQON, Feedly, Google+, Ameba iPhone app." s.homepage = "https://github.com/dekatotoro/SlideMenuControllerSwift" s.license = { :type => "MIT", :file => "LICENSE" } From a74a0a26c21a49dcd4ed0c24fb352a68f89eff33 Mon Sep 17 00:00:00 2001 From: dekatotoro Date: Mon, 12 Sep 2016 13:01:06 +0900 Subject: [PATCH 08/36] Support Swift3.0 # Conflicts: # SlideMenuControllerSwift.xcodeproj/project.pbxproj # SlideMenuControllerSwift/UIImage.swift # SlideMenuControllerSwift/UIView.swift --- .../project.pbxproj | 10 +- SlideMenuControllerSwift/AppDelegate.swift | 36 +- .../BaseTableViewCell.swift | 16 +- .../DataTableViewCell.swift | 4 +- .../DataTableViewCell.xib | 15 +- .../ExSlideMenuController.swift | 18 +- .../GoViewController.swift | 4 +- .../ImageHeaderView.swift | 4 +- SlideMenuControllerSwift/ImageHeaderView.xib | 15 +- .../JavaViewController.swift | 4 +- .../LeftViewController.swift | 77 ++- .../MainViewController.swift | 26 +- .../NonMenuController.swift | 14 +- SlideMenuControllerSwift/String.swift | 10 +- .../SubContentsViewController.storyboard | 14 +- .../SwiftViewController.swift | 4 +- SlideMenuControllerSwift/UIApplication.swift | 2 +- SlideMenuControllerSwift/UIColor.swift | 4 +- SlideMenuControllerSwift/UIImage.swift | 10 +- SlideMenuControllerSwift/UIImageView.swift | 32 +- .../UITableViewExtension.swift | 18 +- SlideMenuControllerSwift/UIView.swift | 4 +- .../SlideMenuControllerSwiftTests.swift | 2 +- Source/SlideMenuController.swift | 445 +++++++++--------- 24 files changed, 386 insertions(+), 402 deletions(-) diff --git a/SlideMenuControllerSwift.xcodeproj/project.pbxproj b/SlideMenuControllerSwift.xcodeproj/project.pbxproj index b8d5f39..a6b6895 100644 --- a/SlideMenuControllerSwift.xcodeproj/project.pbxproj +++ b/SlideMenuControllerSwift.xcodeproj/project.pbxproj @@ -559,7 +559,6 @@ ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 2.3; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; @@ -599,7 +598,6 @@ MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 2.3; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; }; @@ -614,7 +612,7 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "dekatotoro.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 2.3; + SWIFT_VERSION = 3.0; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; @@ -628,7 +626,7 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "dekatotoro.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 2.3; + SWIFT_VERSION = 3.0; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Release; @@ -646,7 +644,7 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "dekatotoro.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 2.3; + SWIFT_VERSION = 3.0; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/SlideMenuControllerSwift.app/SlideMenuControllerSwift"; }; name = Debug; @@ -660,7 +658,7 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "dekatotoro.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 2.3; + SWIFT_VERSION = 3.0; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/SlideMenuControllerSwift.app/SlideMenuControllerSwift"; }; name = Release; diff --git a/SlideMenuControllerSwift/AppDelegate.swift b/SlideMenuControllerSwift/AppDelegate.swift index 44ef41b..b808fbd 100644 --- a/SlideMenuControllerSwift/AppDelegate.swift +++ b/SlideMenuControllerSwift/AppDelegate.swift @@ -14,14 +14,14 @@ class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? - private func createMenuView() { + fileprivate func createMenuView() { // create viewController code... let storyboard = UIStoryboard(name: "Main", bundle: nil) - let mainViewController = storyboard.instantiateViewControllerWithIdentifier("MainViewController") as! MainViewController - let leftViewController = storyboard.instantiateViewControllerWithIdentifier("LeftViewController") as! LeftViewController - let rightViewController = storyboard.instantiateViewControllerWithIdentifier("RightViewController") as! RightViewController + let mainViewController = storyboard.instantiateViewController(withIdentifier: "MainViewController") as! MainViewController + let leftViewController = storyboard.instantiateViewController(withIdentifier: "LeftViewController") as! LeftViewController + let rightViewController = storyboard.instantiateViewController(withIdentifier: "RightViewController") as! RightViewController let nvc: UINavigationController = UINavigationController(rootViewController: mainViewController) @@ -37,32 +37,32 @@ class AppDelegate: UIResponder, UIApplicationDelegate { self.window?.makeKeyAndVisible() } - func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { self.createMenuView() return true } - func applicationWillResignActive(application: UIApplication) { + func applicationWillResignActive(_ application: UIApplication) { // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. } - func applicationDidEnterBackground(application: UIApplication) { + func applicationDidEnterBackground(_ application: UIApplication) { // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. } - func applicationWillEnterForeground(application: UIApplication) { + func applicationWillEnterForeground(_ application: UIApplication) { // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. } - func applicationDidBecomeActive(application: UIApplication) { + func applicationDidBecomeActive(_ application: UIApplication) { // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. } - func applicationWillTerminate(application: UIApplication) { + func applicationWillTerminate(_ application: UIApplication) { // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. // Saves changes in the application's managed object context before the application terminates. self.saveContext() @@ -70,34 +70,34 @@ class AppDelegate: UIResponder, UIApplicationDelegate { // MARK: - Core Data stack - lazy var applicationDocumentsDirectory: NSURL = { + lazy var applicationDocumentsDirectory: URL = { // The directory the application uses to store the Core Data store file. This code uses a directory named "dekatotoro.test11" in the application's documents Application Support directory. - let urls = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask) + let urls = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask) return urls[urls.count-1] }() lazy var managedObjectModel: NSManagedObjectModel = { // The managed object model for the application. This property is not optional. It is a fatal error for the application not to be able to find and load its model. - let modelURL = NSBundle.mainBundle().URLForResource("test11", withExtension: "momd")! - return NSManagedObjectModel(contentsOfURL: modelURL)! + let modelURL = Bundle.main.url(forResource: "test11", withExtension: "momd")! + return NSManagedObjectModel(contentsOf: modelURL)! }() lazy var persistentStoreCoordinator: NSPersistentStoreCoordinator? = { // The persistent store coordinator for the application. This implementation creates and return a coordinator, having added the store for the application to it. This property is optional since there are legitimate error conditions that could cause the creation of the store to fail. // Create the coordinator and store var coordinator: NSPersistentStoreCoordinator? = NSPersistentStoreCoordinator(managedObjectModel: self.managedObjectModel) - let url = self.applicationDocumentsDirectory.URLByAppendingPathComponent("test11.sqlite") + let url = self.applicationDocumentsDirectory.appendingPathComponent("test11.sqlite") var error: NSError? = nil var failureReason = "There was an error creating or loading the application's saved data." do { - try coordinator!.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: url, options: nil) + try coordinator!.addPersistentStore(ofType: NSSQLiteStoreType, configurationName: nil, at: url, options: nil) } catch var error1 as NSError { error = error1 coordinator = nil // Report any error we got. var dict = [String: AnyObject]() - dict[NSLocalizedDescriptionKey] = "Failed to initialize the application's saved data" - dict[NSLocalizedFailureReasonErrorKey] = failureReason + dict[NSLocalizedDescriptionKey] = "Failed to initialize the application's saved data" as AnyObject? + dict[NSLocalizedFailureReasonErrorKey] = failureReason as AnyObject? dict[NSUnderlyingErrorKey] = error error = NSError(domain: "YOUR_ERROR_DOMAIN", code: 9999, userInfo: dict) // Replace this with code to handle the error appropriately. diff --git a/SlideMenuControllerSwift/BaseTableViewCell.swift b/SlideMenuControllerSwift/BaseTableViewCell.swift index 84789f9..9927cec 100644 --- a/SlideMenuControllerSwift/BaseTableViewCell.swift +++ b/SlideMenuControllerSwift/BaseTableViewCell.swift @@ -7,7 +7,7 @@ // import UIKit -public class BaseTableViewCell : UITableViewCell { +open class BaseTableViewCell : UITableViewCell { class var identifier: String { return String.className(self) } public required init?(coder aDecoder: NSCoder) { @@ -20,26 +20,26 @@ public class BaseTableViewCell : UITableViewCell { setup() } - public override func awakeFromNib() { + open override func awakeFromNib() { } - public func setup() { + open func setup() { } - public class func height() -> CGFloat { + open class func height() -> CGFloat { return 48 } - public func setData(data: Any?) { + open func setData(_ data: Any?) { self.backgroundColor = UIColor(hex: "F1F8E9") - self.textLabel?.font = UIFont.italicSystemFontOfSize(18) + self.textLabel?.font = UIFont.italicSystemFont(ofSize: 18) self.textLabel?.textColor = UIColor(hex: "9E9E9E") if let menuText = data as? String { self.textLabel?.text = menuText } } - override public func setHighlighted(highlighted: Bool, animated: Bool) { + override open func setHighlighted(_ highlighted: Bool, animated: Bool) { if highlighted { self.alpha = 0.4 } else { @@ -48,7 +48,7 @@ public class BaseTableViewCell : UITableViewCell { } // ignore the default handling - override public func setSelected(selected: Bool, animated: Bool) { + override open func setSelected(_ selected: Bool, animated: Bool) { } } diff --git a/SlideMenuControllerSwift/DataTableViewCell.swift b/SlideMenuControllerSwift/DataTableViewCell.swift index e882050..39444bf 100644 --- a/SlideMenuControllerSwift/DataTableViewCell.swift +++ b/SlideMenuControllerSwift/DataTableViewCell.swift @@ -24,7 +24,7 @@ class DataTableViewCell : BaseTableViewCell { @IBOutlet weak var dataText: UILabel! override func awakeFromNib() { - self.dataText?.font = UIFont.italicSystemFontOfSize(16) + self.dataText?.font = UIFont.italicSystemFont(ofSize: 16) self.dataText?.textColor = UIColor(hex: "9E9E9E") } @@ -32,7 +32,7 @@ class DataTableViewCell : BaseTableViewCell { return 80 } - override func setData(data: Any?) { + override func setData(_ data: Any?) { if let data = data as? DataTableViewCellData { self.dataImage.setRandomDownloadImage(80, height: 80) self.dataText.text = data.text diff --git a/SlideMenuControllerSwift/DataTableViewCell.xib b/SlideMenuControllerSwift/DataTableViewCell.xib index 381213c..9fd6634 100644 --- a/SlideMenuControllerSwift/DataTableViewCell.xib +++ b/SlideMenuControllerSwift/DataTableViewCell.xib @@ -1,8 +1,9 @@ - + - + + @@ -11,20 +12,16 @@ - + - - - @@ -42,8 +38,7 @@ - - + diff --git a/SlideMenuControllerSwift/ExSlideMenuController.swift b/SlideMenuControllerSwift/ExSlideMenuController.swift index b826d85..870822b 100644 --- a/SlideMenuControllerSwift/ExSlideMenuController.swift +++ b/SlideMenuControllerSwift/ExSlideMenuController.swift @@ -22,23 +22,23 @@ class ExSlideMenuController : SlideMenuController { return false } - override func track(trackAction: TrackAction) { + override func track(_ trackAction: TrackAction) { switch trackAction { - case .LeftTapOpen: + case .leftTapOpen: print("TrackAction: left tap open.") - case .LeftTapClose: + case .leftTapClose: print("TrackAction: left tap close.") - case .LeftFlickOpen: + case .leftFlickOpen: print("TrackAction: left flick open.") - case .LeftFlickClose: + case .leftFlickClose: print("TrackAction: left flick close.") - case .RightTapOpen: + case .rightTapOpen: print("TrackAction: right tap open.") - case .RightTapClose: + case .rightTapClose: print("TrackAction: right tap close.") - case .RightFlickOpen: + case .rightFlickOpen: print("TrackAction: right flick open.") - case .RightFlickClose: + case .rightFlickClose: print("TrackAction: right flick close.") } } diff --git a/SlideMenuControllerSwift/GoViewController.swift b/SlideMenuControllerSwift/GoViewController.swift index 0aab2ea..8bf5a95 100644 --- a/SlideMenuControllerSwift/GoViewController.swift +++ b/SlideMenuControllerSwift/GoViewController.swift @@ -14,8 +14,8 @@ class GoViewController: UIViewController { super.viewDidLoad() } - override func viewWillAppear(animated: Bool) { + override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) self.setNavigationBarItem() } -} \ No newline at end of file +} diff --git a/SlideMenuControllerSwift/ImageHeaderView.swift b/SlideMenuControllerSwift/ImageHeaderView.swift index 788308a..b19106f 100644 --- a/SlideMenuControllerSwift/ImageHeaderView.swift +++ b/SlideMenuControllerSwift/ImageHeaderView.swift @@ -19,8 +19,8 @@ class ImageHeaderView : UIView { self.profileImage.layer.cornerRadius = self.profileImage.frame.size.height / 2 self.profileImage.clipsToBounds = true self.profileImage.layer.borderWidth = 1 - self.profileImage.layer.borderColor = UIColor.whiteColor().CGColor + self.profileImage.layer.borderColor = UIColor.white.cgColor self.profileImage.setRandomDownloadImage(80, height: 80) self.backgroundImage.setRandomDownloadImage(Int(self.frame.size.width), height: 160) } -} \ No newline at end of file +} diff --git a/SlideMenuControllerSwift/ImageHeaderView.xib b/SlideMenuControllerSwift/ImageHeaderView.xib index 9d87004..45d0e07 100644 --- a/SlideMenuControllerSwift/ImageHeaderView.xib +++ b/SlideMenuControllerSwift/ImageHeaderView.xib @@ -1,8 +1,9 @@ - + - + + @@ -11,21 +12,15 @@ - - - - + - - - - + diff --git a/SlideMenuControllerSwift/JavaViewController.swift b/SlideMenuControllerSwift/JavaViewController.swift index 106107f..a80ec15 100644 --- a/SlideMenuControllerSwift/JavaViewController.swift +++ b/SlideMenuControllerSwift/JavaViewController.swift @@ -14,8 +14,8 @@ class JavaViewController: UIViewController { super.viewDidLoad() } - override func viewWillAppear(animated: Bool) { + override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) self.setNavigationBarItem() } -} \ No newline at end of file +} diff --git a/SlideMenuControllerSwift/LeftViewController.swift b/SlideMenuControllerSwift/LeftViewController.swift index e1cb7a4..ba71992 100644 --- a/SlideMenuControllerSwift/LeftViewController.swift +++ b/SlideMenuControllerSwift/LeftViewController.swift @@ -8,15 +8,15 @@ import UIKit enum LeftMenu: Int { - case Main = 0 - case Swift - case Java - case Go - case NonMenu + case main = 0 + case swift + case java + case go + case nonMenu } protocol LeftMenuProtocol : class { - func changeViewController(menu: LeftMenu) + func changeViewController(_ menu: LeftMenu) } class LeftViewController : UIViewController, LeftMenuProtocol { @@ -36,19 +36,20 @@ class LeftViewController : UIViewController, LeftMenuProtocol { override func viewDidLoad() { super.viewDidLoad() + self.tableView.separatorColor = UIColor(red: 224/255, green: 224/255, blue: 224/255, alpha: 1.0) let storyboard = UIStoryboard(name: "Main", bundle: nil) - let swiftViewController = storyboard.instantiateViewControllerWithIdentifier("SwiftViewController") as! SwiftViewController + let swiftViewController = storyboard.instantiateViewController(withIdentifier: "SwiftViewController") as! SwiftViewController self.swiftViewController = UINavigationController(rootViewController: swiftViewController) - let javaViewController = storyboard.instantiateViewControllerWithIdentifier("JavaViewController") as! JavaViewController + let javaViewController = storyboard.instantiateViewController(withIdentifier: "JavaViewController") as! JavaViewController self.javaViewController = UINavigationController(rootViewController: javaViewController) - let goViewController = storyboard.instantiateViewControllerWithIdentifier("GoViewController") as! GoViewController + let goViewController = storyboard.instantiateViewController(withIdentifier: "GoViewController") as! GoViewController self.goViewController = UINavigationController(rootViewController: goViewController) - let nonMenuController = storyboard.instantiateViewControllerWithIdentifier("NonMenuController") as! NonMenuController + let nonMenuController = storyboard.instantiateViewController(withIdentifier: "NonMenuController") as! NonMenuController nonMenuController.delegate = self self.nonMenuViewController = UINavigationController(rootViewController: nonMenuController) @@ -58,7 +59,7 @@ class LeftViewController : UIViewController, LeftMenuProtocol { self.view.addSubview(self.imageHeaderView) } - override func viewDidAppear(animated: Bool) { + override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) } @@ -68,46 +69,58 @@ class LeftViewController : UIViewController, LeftMenuProtocol { self.view.layoutIfNeeded() } - func changeViewController(menu: LeftMenu) { + func changeViewController(_ menu: LeftMenu) { switch menu { - case .Main: + case .main: self.slideMenuController()?.changeMainViewController(self.mainViewController, close: true) - case .Swift: + case .swift: self.slideMenuController()?.changeMainViewController(self.swiftViewController, close: true) - case .Java: + case .java: self.slideMenuController()?.changeMainViewController(self.javaViewController, close: true) - case .Go: + case .go: self.slideMenuController()?.changeMainViewController(self.goViewController, close: true) - case .NonMenu: + case .nonMenu: self.slideMenuController()?.changeMainViewController(self.nonMenuViewController, close: true) } } } extension LeftViewController : UITableViewDelegate { - func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { - if let menu = LeftMenu(rawValue: indexPath.item) { + func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { + if let menu = LeftMenu(rawValue: indexPath.row) { switch menu { - case .Main, .Swift, .Java, .Go, .NonMenu: + case .main, .swift, .java, .go, .nonMenu: return BaseTableViewCell.height() } } return 0 } + + func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { + if let menu = LeftMenu(rawValue: indexPath.row) { + self.changeViewController(menu) + } + } + + func scrollViewDidScroll(_ scrollView: UIScrollView) { + if self.tableView == scrollView { + + } + } } extension LeftViewController : UITableViewDataSource { - func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return menus.count } - func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { - if let menu = LeftMenu(rawValue: indexPath.item) { + if let menu = LeftMenu(rawValue: indexPath.row) { switch menu { - case .Main, .Swift, .Java, .Go, .NonMenu: - let cell = BaseTableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: BaseTableViewCell.identifier) + case .main, .swift, .java, .go, .nonMenu: + let cell = BaseTableViewCell(style: UITableViewCellStyle.subtitle, reuseIdentifier: BaseTableViewCell.identifier) cell.setData(menus[indexPath.row]) return cell } @@ -115,19 +128,5 @@ extension LeftViewController : UITableViewDataSource { return UITableViewCell() } - func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { - if let menu = LeftMenu(rawValue: indexPath.item) { - self.changeViewController(menu) - } - } -} - -extension LeftViewController: UIScrollViewDelegate { - - func scrollViewDidScroll(scrollView: UIScrollView) { - if self.tableView == scrollView { - - } - } } diff --git a/SlideMenuControllerSwift/MainViewController.swift b/SlideMenuControllerSwift/MainViewController.swift index 531dda8..6af1b65 100644 --- a/SlideMenuControllerSwift/MainViewController.swift +++ b/SlideMenuControllerSwift/MainViewController.swift @@ -18,11 +18,11 @@ class MainViewController: UIViewController { self.tableView.registerCellNib(DataTableViewCell.self) } - override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) { - super.viewWillTransitionToSize(size, withTransitionCoordinator: coordinator) + override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) { + super.viewWillTransition(to: size, with: coordinator) } - override func viewWillAppear(animated: Bool) { + override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) self.setNavigationBarItem() } @@ -35,28 +35,28 @@ class MainViewController: UIViewController { extension MainViewController : UITableViewDelegate { - func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { + func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { return DataTableViewCell.height() } + + func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { + let storyboard = UIStoryboard(name: "SubContentsViewController", bundle: nil) + let subContentsVC = storyboard.instantiateViewController(withIdentifier: "SubContentsViewController") as! SubContentsViewController + self.navigationController?.pushViewController(subContentsVC, animated: true) + } } extension MainViewController : UITableViewDataSource { - func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return self.mainContens.count } - func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { - let cell = self.tableView.dequeueReusableCellWithIdentifier(DataTableViewCell.identifier) as! DataTableViewCell + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = self.tableView.dequeueReusableCell(withIdentifier: DataTableViewCell.identifier) as! DataTableViewCell let data = DataTableViewCellData(imageUrl: "dummy", text: mainContens[indexPath.row]) cell.setData(data) return cell } - - func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { - let storyboard = UIStoryboard(name: "SubContentsViewController", bundle: nil) - let subContentsVC = storyboard.instantiateViewControllerWithIdentifier("SubContentsViewController") as! SubContentsViewController - self.navigationController?.pushViewController(subContentsVC, animated: true) - } } extension MainViewController : SlideMenuControllerDelegate { diff --git a/SlideMenuControllerSwift/NonMenuController.swift b/SlideMenuControllerSwift/NonMenuController.swift index 20dd896..958d9c2 100644 --- a/SlideMenuControllerSwift/NonMenuController.swift +++ b/SlideMenuControllerSwift/NonMenuController.swift @@ -18,25 +18,25 @@ class NonMenuController: UIViewController { super.viewDidLoad() } - override func viewWillAppear(animated: Bool) { + override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) self.removeNavigationBarItem() } - override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) { - super.viewWillTransitionToSize(size, withTransitionCoordinator: coordinator) - coordinator.animateAlongsideTransition(nil, completion: { (context: UIViewControllerTransitionCoordinatorContext!) -> Void in + override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) { + super.viewWillTransition(to: size, with: coordinator) + coordinator.animate(alongsideTransition: nil, completion: { (context: UIViewControllerTransitionCoordinatorContext!) -> Void in guard let vc = (self.slideMenuController()?.mainViewController as? UINavigationController)?.topViewController else { return } - if vc.isKindOfClass(NonMenuController) { + if vc.isKind(of: NonMenuController.self) { self.slideMenuController()?.removeLeftGestures() self.slideMenuController()?.removeRightGestures() } }) } - @IBAction func didTouchToMain(sender: UIButton) { - delegate?.changeViewController(LeftMenu.Main) + @IBAction func didTouchToMain(_ sender: UIButton) { + delegate?.changeViewController(LeftMenu.main) } } diff --git a/SlideMenuControllerSwift/String.swift b/SlideMenuControllerSwift/String.swift index a9ef7ee..61e4045 100644 --- a/SlideMenuControllerSwift/String.swift +++ b/SlideMenuControllerSwift/String.swift @@ -9,15 +9,15 @@ import Foundation extension String { - static func className(aClass: AnyClass) -> String { - return NSStringFromClass(aClass).componentsSeparatedByString(".").last! + static func className(_ aClass: AnyClass) -> String { + return NSStringFromClass(aClass).components(separatedBy: ".").last! } - func substring(from: Int) -> String { - return self.substringFromIndex(self.startIndex.advancedBy(from)) + func substring(_ from: Int) -> String { + return self.substring(from: self.characters.index(self.startIndex, offsetBy: from)) } var length: Int { return self.characters.count } -} \ No newline at end of file +} diff --git a/SlideMenuControllerSwift/SubContentsViewController.storyboard b/SlideMenuControllerSwift/SubContentsViewController.storyboard index e0e55c0..57264da 100644 --- a/SlideMenuControllerSwift/SubContentsViewController.storyboard +++ b/SlideMenuControllerSwift/SubContentsViewController.storyboard @@ -1,8 +1,9 @@ - + - + + @@ -18,24 +19,23 @@ - - + + + diff --git a/SlideMenuControllerSwift/SwiftViewController.swift b/SlideMenuControllerSwift/SwiftViewController.swift index 265a932..4fc910f 100644 --- a/SlideMenuControllerSwift/SwiftViewController.swift +++ b/SlideMenuControllerSwift/SwiftViewController.swift @@ -16,9 +16,9 @@ class SwiftViewController: UIViewController { super.viewDidLoad() } - override func viewWillAppear(animated: Bool) { + override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) self.setNavigationBarItem() } -} \ No newline at end of file +} diff --git a/SlideMenuControllerSwift/UIApplication.swift b/SlideMenuControllerSwift/UIApplication.swift index 3653f75..798b294 100644 --- a/SlideMenuControllerSwift/UIApplication.swift +++ b/SlideMenuControllerSwift/UIApplication.swift @@ -9,7 +9,7 @@ import UIKit extension UIApplication { - class func topViewController(viewController: UIViewController? = UIApplication.sharedApplication().keyWindow?.rootViewController) -> UIViewController? { + class func topViewController(_ viewController: UIViewController? = UIApplication.shared.keyWindow?.rootViewController) -> UIViewController? { if let nav = viewController as? UINavigationController { return topViewController(nav.visibleViewController) } diff --git a/SlideMenuControllerSwift/UIColor.swift b/SlideMenuControllerSwift/UIColor.swift index 999a5de..f73260f 100644 --- a/SlideMenuControllerSwift/UIColor.swift +++ b/SlideMenuControllerSwift/UIColor.swift @@ -20,9 +20,9 @@ extension UIColor { hexWithoutSymbol = hex.substring(1) } - let scanner = NSScanner(string: hexWithoutSymbol) + let scanner = Scanner(string: hexWithoutSymbol) var hexInt:UInt32 = 0x0 - scanner.scanHexInt(&hexInt) + scanner.scanHexInt32(&hexInt) var r:UInt32!, g:UInt32!, b:UInt32! switch (hexWithoutSymbol.length) { diff --git a/SlideMenuControllerSwift/UIImage.swift b/SlideMenuControllerSwift/UIImage.swift index 627c6ca..669f7a5 100644 --- a/SlideMenuControllerSwift/UIImage.swift +++ b/SlideMenuControllerSwift/UIImage.swift @@ -9,15 +9,15 @@ import UIKit extension UIImage { - func trim(trimRect trimRect :CGRect) -> UIImage { - if CGRectContainsRect(CGRect(origin: CGPointZero, size: self.size), trimRect) { - if let imageRef = CGImageCreateWithImageInRect(self.CGImage!, trimRect) { - return UIImage(CGImage: imageRef) + func trim(trimRect :CGRect) -> UIImage { + if CGRect(origin: CGPoint.zero, size: self.size).contains(trimRect) { + if let imageRef = self.cgImage?.cropping(to: trimRect) { + return UIImage(cgImage: imageRef) } } UIGraphicsBeginImageContextWithOptions(trimRect.size, true, self.scale) - self.drawInRect(CGRect(x: -trimRect.minX, y: -trimRect.minY, width: self.size.width, height: self.size.height)) + self.draw(in: CGRect(x: -trimRect.minX, y: -trimRect.minY, width: self.size.width, height: self.size.height)) let trimmedImage = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() diff --git a/SlideMenuControllerSwift/UIImageView.swift b/SlideMenuControllerSwift/UIImageView.swift index 600acdb..e27f673 100644 --- a/SlideMenuControllerSwift/UIImageView.swift +++ b/SlideMenuControllerSwift/UIImageView.swift @@ -11,42 +11,42 @@ import UIKit extension UIImageView { - func setRandomDownloadImage(width: Int, height: Int) { + func setRandomDownloadImage(_ width: Int, height: Int) { if self.image != nil { self.alpha = 1 return } self.alpha = 0 - let url = NSURL(string: "http://lorempixel.com/\(width)/\(height)/")! - let configuration = NSURLSessionConfiguration.defaultSessionConfiguration() + let url = URL(string: "http://lorempixel.com/\(width)/\(height)/")! + let configuration = URLSessionConfiguration.default configuration.timeoutIntervalForRequest = 15 configuration.timeoutIntervalForResource = 15 - configuration.requestCachePolicy = NSURLRequestCachePolicy.ReloadIgnoringLocalCacheData - let session = NSURLSession(configuration: configuration) - let task = session.dataTaskWithURL(url, completionHandler: { (data: NSData?, response: NSURLResponse?, error: NSError?) -> Void in + configuration.requestCachePolicy = NSURLRequest.CachePolicy.reloadIgnoringLocalCacheData + let session = URLSession(configuration: configuration) + let task = session.dataTask(with: url) { (data, response, error) in if error != nil { return } - if let response = response as? NSHTTPURLResponse { + if let response = response as? HTTPURLResponse { if response.statusCode / 100 != 2 { return } if let data = data, let image = UIImage(data: data) { - dispatch_async(dispatch_get_main_queue(), { () -> Void in + DispatchQueue.main.async(execute: { () -> Void in self.image = image - UIView.animateWithDuration(0.3, animations: { () -> Void in + UIView.animate(withDuration: 0.3, animations: { () -> Void in self.alpha = 1 - }) { (finished: Bool) -> Void in - } + }, completion: { (finished: Bool) -> Void in + }) }) } } - }) + } task.resume() } - func clipParallaxEffect(baseImage: UIImage?, screenSize: CGSize, displayHeight: CGFloat) { + func clipParallaxEffect(_ baseImage: UIImage?, screenSize: CGSize, displayHeight: CGFloat) { if let baseImage = baseImage { if displayHeight < 0 { return @@ -61,9 +61,9 @@ extension UIImageView { let left: CGFloat = (imageSize.width - cropWidth) / 2 let top: CGFloat = (imageSize.height - cropHeight) / 2 - let trimRect : CGRect = CGRectMake(left, top, cropWidth, cropHeight) + let trimRect : CGRect = CGRect(x: left, y: top, width: cropWidth, height: cropHeight) self.image = baseImage.trim(trimRect: trimRect) - self.frame = CGRectMake(0, 0, screenSize.width, displayHeight) + self.frame = CGRect(x: 0, y: 0, width: screenSize.width, height: displayHeight) } } -} \ No newline at end of file +} diff --git a/SlideMenuControllerSwift/UITableViewExtension.swift b/SlideMenuControllerSwift/UITableViewExtension.swift index ba71917..48ca05a 100644 --- a/SlideMenuControllerSwift/UITableViewExtension.swift +++ b/SlideMenuControllerSwift/UITableViewExtension.swift @@ -9,25 +9,25 @@ import UIKit public extension UITableView { - func registerCellClass(cellClass: AnyClass) { + func registerCellClass(_ cellClass: AnyClass) { let identifier = String.className(cellClass) - self.registerClass(cellClass, forCellReuseIdentifier: identifier) + self.register(cellClass, forCellReuseIdentifier: identifier) } - func registerCellNib(cellClass: AnyClass) { + func registerCellNib(_ cellClass: AnyClass) { let identifier = String.className(cellClass) let nib = UINib(nibName: identifier, bundle: nil) - self.registerNib(nib, forCellReuseIdentifier: identifier) + self.register(nib, forCellReuseIdentifier: identifier) } - func registerHeaderFooterViewClass(viewClass: AnyClass) { + func registerHeaderFooterViewClass(_ viewClass: AnyClass) { let identifier = String.className(viewClass) - self.registerClass(viewClass, forHeaderFooterViewReuseIdentifier: identifier) + self.register(viewClass, forHeaderFooterViewReuseIdentifier: identifier) } - func registerHeaderFooterViewNib(viewClass: AnyClass) { + func registerHeaderFooterViewNib(_ viewClass: AnyClass) { let identifier = String.className(viewClass) let nib = UINib(nibName: identifier, bundle: nil) - self.registerNib(nib, forHeaderFooterViewReuseIdentifier: identifier) + self.register(nib, forHeaderFooterViewReuseIdentifier: identifier) } -} \ No newline at end of file +} diff --git a/SlideMenuControllerSwift/UIView.swift b/SlideMenuControllerSwift/UIView.swift index 944673c..9fc4d28 100644 --- a/SlideMenuControllerSwift/UIView.swift +++ b/SlideMenuControllerSwift/UIView.swift @@ -9,9 +9,9 @@ import UIKit extension UIView { - class func loadNib(viewType: T.Type) -> T { + class func loadNib(_ viewType: T.Type) -> T { let className = String.className(viewType) - return NSBundle(forClass: viewType).loadNibNamed(className, owner: nil, options: nil)!.first as! T + return Bundle(for: viewType).loadNibNamed(className, owner: nil, options: nil)!.first as! T } class func loadNib() -> Self { diff --git a/SlideMenuControllerSwiftTests/SlideMenuControllerSwiftTests.swift b/SlideMenuControllerSwiftTests/SlideMenuControllerSwiftTests.swift index 3aaab61..bc14ff9 100644 --- a/SlideMenuControllerSwiftTests/SlideMenuControllerSwiftTests.swift +++ b/SlideMenuControllerSwiftTests/SlideMenuControllerSwiftTests.swift @@ -27,7 +27,7 @@ class SlideMenuControllerSwiftTests: XCTestCase { func testPerformanceExample() { // This is an example of a performance test case. - self.measureBlock() { + self.measure() { // Put the code you want to measure the time of here. } } diff --git a/Source/SlideMenuController.swift b/Source/SlideMenuController.swift index f212d8d..7f6d7b9 100644 --- a/Source/SlideMenuController.swift +++ b/Source/SlideMenuController.swift @@ -8,14 +8,14 @@ import Foundation import UIKit @objc public protocol SlideMenuControllerDelegate { - optional func leftWillOpen() - optional func leftDidOpen() - optional func leftWillClose() - optional func leftDidClose() - optional func rightWillOpen() - optional func rightDidOpen() - optional func rightWillClose() - optional func rightDidClose() + @objc optional func leftWillOpen() + @objc optional func leftDidOpen() + @objc optional func leftWillClose() + @objc optional func leftDidClose() + @objc optional func rightWillOpen() + @objc optional func rightDidOpen() + @objc optional func rightWillClose() + @objc optional func rightDidClose() } public struct SlideMenuOptions { @@ -26,7 +26,7 @@ public struct SlideMenuOptions { public static var contentViewDrag: Bool = false public static var shadowOpacity: CGFloat = 0.0 public static var shadowRadius: CGFloat = 0.0 - public static var shadowOffset: CGSize = CGSizeMake(0,0) + public static var shadowOffset: CGSize = CGSize(width: 0,height: 0) public static var panFromBezel: Bool = true public static var animationDuration: CGFloat = 0.4 public static var rightViewWidth: CGFloat = 270.0 @@ -35,25 +35,25 @@ public struct SlideMenuOptions { public static var hideStatusBar: Bool = true public static var pointOfNoReturnWidth: CGFloat = 44.0 public static var simultaneousGestureRecognizers: Bool = true - public static var opacityViewBackgroundColor: UIColor = UIColor.blackColor() + public static var opacityViewBackgroundColor: UIColor = UIColor.black } -public class SlideMenuController: UIViewController, UIGestureRecognizerDelegate { +open class SlideMenuController: UIViewController, UIGestureRecognizerDelegate { public enum SlideAction { - case Open - case Close + case open + case close } public enum TrackAction { - case LeftTapOpen - case LeftTapClose - case LeftFlickOpen - case LeftFlickClose - case RightTapOpen - case RightTapClose - case RightFlickOpen - case RightFlickClose + case leftTapOpen + case leftTapClose + case leftFlickOpen + case leftFlickClose + case rightTapOpen + case rightTapClose + case rightFlickOpen + case rightFlickClose } @@ -63,25 +63,25 @@ public class SlideMenuController: UIViewController, UIGestureRecognizerDelegate var velocity: CGFloat } - public weak var delegate: SlideMenuControllerDelegate? + open weak var delegate: SlideMenuControllerDelegate? - public var opacityView = UIView() - public var mainContainerView = UIView() - public var leftContainerView = UIView() - public var rightContainerView = UIView() - public var mainViewController: UIViewController? - public var leftViewController: UIViewController? - public var leftPanGesture: UIPanGestureRecognizer? - public var leftTapGesture: UITapGestureRecognizer? - public var rightViewController: UIViewController? - public var rightPanGesture: UIPanGestureRecognizer? - public var rightTapGesture: UITapGestureRecognizer? + open var opacityView = UIView() + open var mainContainerView = UIView() + open var leftContainerView = UIView() + open var rightContainerView = UIView() + open var mainViewController: UIViewController? + open var leftViewController: UIViewController? + open var leftPanGesture: UIPanGestureRecognizer? + open var leftTapGesture: UITapGestureRecognizer? + open var rightViewController: UIViewController? + open var rightPanGesture: UIPanGestureRecognizer? + open var rightTapGesture: UITapGestureRecognizer? public required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) } - public override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) { + public override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) { super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil) } @@ -107,17 +107,17 @@ public class SlideMenuController: UIViewController, UIGestureRecognizerDelegate initView() } - public override func awakeFromNib() { + open override func awakeFromNib() { initView() } deinit { } - public func initView() { + open func initView() { mainContainerView = UIView(frame: view.bounds) - mainContainerView.backgroundColor = UIColor.clearColor() - mainContainerView.autoresizingMask = [.FlexibleHeight, .FlexibleWidth] - view.insertSubview(mainContainerView, atIndex: 0) + mainContainerView.backgroundColor = UIColor.clear + mainContainerView.autoresizingMask = [.flexibleHeight, .flexibleWidth] + view.insertSubview(mainContainerView, at: 0) var opacityframe: CGRect = view.bounds let opacityOffset: CGFloat = 0 @@ -125,9 +125,9 @@ public class SlideMenuController: UIViewController, UIGestureRecognizerDelegate opacityframe.size.height = opacityframe.size.height - opacityOffset opacityView = UIView(frame: opacityframe) opacityView.backgroundColor = SlideMenuOptions.opacityViewBackgroundColor - opacityView.autoresizingMask = [UIViewAutoresizing.FlexibleHeight, UIViewAutoresizing.FlexibleWidth] + opacityView.autoresizingMask = [UIViewAutoresizing.flexibleHeight, UIViewAutoresizing.flexibleWidth] opacityView.layer.opacity = 0.0 - view.insertSubview(opacityView, atIndex: 1) + view.insertSubview(opacityView, at: 1) if leftViewController != nil { var leftFrame: CGRect = view.bounds @@ -137,9 +137,9 @@ public class SlideMenuController: UIViewController, UIGestureRecognizerDelegate leftFrame.origin.y = leftFrame.origin.y + leftOffset leftFrame.size.height = leftFrame.size.height - leftOffset leftContainerView = UIView(frame: leftFrame) - leftContainerView.backgroundColor = UIColor.clearColor() - leftContainerView.autoresizingMask = UIViewAutoresizing.FlexibleHeight - view.insertSubview(leftContainerView, atIndex: 2) + leftContainerView.backgroundColor = UIColor.clear + leftContainerView.autoresizingMask = UIViewAutoresizing.flexibleHeight + view.insertSubview(leftContainerView, at: 2) addLeftGestures() } @@ -151,24 +151,24 @@ public class SlideMenuController: UIViewController, UIGestureRecognizerDelegate rightFrame.origin.y = rightFrame.origin.y + rightOffset; rightFrame.size.height = rightFrame.size.height - rightOffset rightContainerView = UIView(frame: rightFrame) - rightContainerView.backgroundColor = UIColor.clearColor() - rightContainerView.autoresizingMask = UIViewAutoresizing.FlexibleHeight - view.insertSubview(rightContainerView, atIndex: 3) + rightContainerView.backgroundColor = UIColor.clear + rightContainerView.autoresizingMask = UIViewAutoresizing.flexibleHeight + view.insertSubview(rightContainerView, at: 3) addRightGestures() } } - public override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) { - super.viewWillTransitionToSize(size, withTransitionCoordinator: coordinator) - mainContainerView.transform = CGAffineTransformMakeScale(1.0, 1.0) - leftContainerView.hidden = true - rightContainerView.hidden = true + open override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) { + super.viewWillTransition(to: size, with: coordinator) + mainContainerView.transform = CGAffineTransform(scaleX: 1.0, y: 1.0) + leftContainerView.isHidden = true + rightContainerView.isHidden = true - coordinator.animateAlongsideTransition(nil, completion: { (context: UIViewControllerTransitionCoordinatorContext!) -> Void in + coordinator.animate(alongsideTransition: nil, completion: { (context: UIViewControllerTransitionCoordinatorContext!) -> Void in self.closeLeftNonAnimation() self.closeRightNonAnimation() - self.leftContainerView.hidden = false - self.rightContainerView.hidden = false + self.leftContainerView.isHidden = false + self.rightContainerView.isHidden = false if self.leftPanGesture != nil && self.leftPanGesture != nil { self.removeLeftGestures() @@ -182,35 +182,35 @@ public class SlideMenuController: UIViewController, UIGestureRecognizerDelegate }) } - public override func viewDidLoad() { + open override func viewDidLoad() { super.viewDidLoad() - edgesForExtendedLayout = UIRectEdge.None + edgesForExtendedLayout = UIRectEdge() } - override public func viewWillAppear(animated: Bool) { + override open func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) self.mainViewController?.viewWillAppear(animated) } - public override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask { + open override var supportedInterfaceOrientations : UIInterfaceOrientationMask { if let mainController = self.mainViewController{ - return mainController.supportedInterfaceOrientations() + return mainController.supportedInterfaceOrientations } - return UIInterfaceOrientationMask.All + return UIInterfaceOrientationMask.all } - public override func shouldAutorotate() -> Bool { - return mainViewController?.shouldAutorotate() ?? false + open override var shouldAutorotate : Bool { + return mainViewController?.shouldAutorotate ?? false } - public override func viewWillLayoutSubviews() { + open override func viewWillLayoutSubviews() { // topLayoutGuideの値が確定するこのタイミングで各種ViewControllerをセットする setUpViewController(mainContainerView, targetViewController: mainViewController) setUpViewController(leftContainerView, targetViewController: leftViewController) setUpViewController(rightContainerView, targetViewController: rightViewController) } - public override func openLeft() { + open override func openLeft() { guard let _ = leftViewController else { // If leftViewController is nil, then return return } @@ -222,10 +222,10 @@ public class SlideMenuController: UIViewController, UIGestureRecognizerDelegate leftViewController?.beginAppearanceTransition(isLeftHidden(), animated: true) openLeftWithVelocity(0.0) - track(.LeftTapOpen) + track(.leftTapOpen) } - public override func openRight() { + open override func openRight() { guard let _ = rightViewController else { // If rightViewController is nil, then return return } @@ -236,10 +236,10 @@ public class SlideMenuController: UIViewController, UIGestureRecognizerDelegate rightViewController?.beginAppearanceTransition(isRightHidden(), animated: true) openRightWithVelocity(0.0) - track(.RightTapOpen) + track(.rightTapOpen) } - public override func closeLeft() { + open override func closeLeft() { guard let _ = leftViewController else { // If leftViewController is nil, then return return } @@ -251,7 +251,7 @@ public class SlideMenuController: UIViewController, UIGestureRecognizerDelegate setCloseWindowLevel() } - public override func closeRight() { + open override func closeRight() { guard let _ = rightViewController else { // If rightViewController is nil, then return return } @@ -264,7 +264,7 @@ public class SlideMenuController: UIViewController, UIGestureRecognizerDelegate } - public func addLeftGestures() { + open func addLeftGestures() { if (leftViewController != nil) { if leftPanGesture == nil { @@ -281,7 +281,7 @@ public class SlideMenuController: UIViewController, UIGestureRecognizerDelegate } } - public func addRightGestures() { + open func addRightGestures() { if (rightViewController != nil) { if rightPanGesture == nil { @@ -298,7 +298,7 @@ public class SlideMenuController: UIViewController, UIGestureRecognizerDelegate } } - public func removeLeftGestures() { + open func removeLeftGestures() { if leftPanGesture != nil { view.removeGestureRecognizer(leftPanGesture!) @@ -311,7 +311,7 @@ public class SlideMenuController: UIViewController, UIGestureRecognizerDelegate } } - public func removeRightGestures() { + open func removeRightGestures() { if rightPanGesture != nil { view.removeGestureRecognizer(rightPanGesture!) @@ -324,26 +324,26 @@ public class SlideMenuController: UIViewController, UIGestureRecognizerDelegate } } - public func isTagetViewController() -> Bool { + open func isTagetViewController() -> Bool { // Function to determine the target ViewController // Please to override it if necessary return true } - public func track(trackAction: TrackAction) { + open func track(_ trackAction: TrackAction) { // function is for tracking // Please to override it if necessary } struct LeftPanState { - static var frameAtStartOfPan: CGRect = CGRectZero - static var startPointOfPan: CGPoint = CGPointZero + static var frameAtStartOfPan: CGRect = CGRect.zero + static var startPointOfPan: CGPoint = CGPoint.zero static var wasOpenAtStartOfPan: Bool = false static var wasHiddenAtStartOfPan: Bool = false - static var lastState : UIGestureRecognizerState = .Ended + static var lastState : UIGestureRecognizerState = .ended } - func handleLeftPanGesture(panGesture: UIPanGestureRecognizer) { + func handleLeftPanGesture(_ panGesture: UIPanGestureRecognizer) { if !isTagetViewController() { return @@ -354,8 +354,8 @@ public class SlideMenuController: UIViewController, UIGestureRecognizerDelegate } switch panGesture.state { - case UIGestureRecognizerState.Began: - if LeftPanState.lastState != .Ended && LeftPanState.lastState != .Cancelled && LeftPanState.lastState != .Failed { + case UIGestureRecognizerState.began: + if LeftPanState.lastState != .ended && LeftPanState.lastState != .cancelled && LeftPanState.lastState != .failed { return } @@ -366,38 +366,38 @@ public class SlideMenuController: UIViewController, UIGestureRecognizerDelegate } LeftPanState.frameAtStartOfPan = leftContainerView.frame - LeftPanState.startPointOfPan = panGesture.locationInView(view) + LeftPanState.startPointOfPan = panGesture.location(in: view) LeftPanState.wasOpenAtStartOfPan = isLeftOpen() LeftPanState.wasHiddenAtStartOfPan = isLeftHidden() leftViewController?.beginAppearanceTransition(LeftPanState.wasHiddenAtStartOfPan, animated: true) addShadowToView(leftContainerView) setOpenWindowLevel() - case UIGestureRecognizerState.Changed: - if LeftPanState.lastState != .Began && LeftPanState.lastState != .Changed { + case UIGestureRecognizerState.changed: + if LeftPanState.lastState != .began && LeftPanState.lastState != .changed { return } - let translation: CGPoint = panGesture.translationInView(panGesture.view!) + let translation: CGPoint = panGesture.translation(in: panGesture.view!) leftContainerView.frame = applyLeftTranslation(translation, toFrame: LeftPanState.frameAtStartOfPan) applyLeftOpacity() applyLeftContentViewScale() - case UIGestureRecognizerState.Ended, UIGestureRecognizerState.Cancelled: - if LeftPanState.lastState != .Changed { + case UIGestureRecognizerState.ended, UIGestureRecognizerState.cancelled: + if LeftPanState.lastState != .changed { setCloseWindowLevel() return } - let velocity:CGPoint = panGesture.velocityInView(panGesture.view) + let velocity:CGPoint = panGesture.velocity(in: panGesture.view) let panInfo: PanInfo = panLeftResultInfoForVelocity(velocity) - if panInfo.action == .Open { + if panInfo.action == .open { if !LeftPanState.wasHiddenAtStartOfPan { leftViewController?.beginAppearanceTransition(true, animated: true) } openLeftWithVelocity(panInfo.velocity) - track(.LeftFlickOpen) + track(.leftFlickOpen) } else { if LeftPanState.wasHiddenAtStartOfPan { leftViewController?.beginAppearanceTransition(false, animated: true) @@ -405,10 +405,10 @@ public class SlideMenuController: UIViewController, UIGestureRecognizerDelegate closeLeftWithVelocity(panInfo.velocity) setCloseWindowLevel() - track(.LeftFlickClose) + track(.leftFlickClose) } - case UIGestureRecognizerState.Failed, UIGestureRecognizerState.Possible: + case UIGestureRecognizerState.failed, UIGestureRecognizerState.possible: break } @@ -416,14 +416,14 @@ public class SlideMenuController: UIViewController, UIGestureRecognizerDelegate } struct RightPanState { - static var frameAtStartOfPan: CGRect = CGRectZero - static var startPointOfPan: CGPoint = CGPointZero + static var frameAtStartOfPan: CGRect = CGRect.zero + static var startPointOfPan: CGPoint = CGPoint.zero static var wasOpenAtStartOfPan: Bool = false static var wasHiddenAtStartOfPan: Bool = false - static var lastState : UIGestureRecognizerState = .Ended + static var lastState : UIGestureRecognizerState = .ended } - func handleRightPanGesture(panGesture: UIPanGestureRecognizer) { + func handleRightPanGesture(_ panGesture: UIPanGestureRecognizer) { if !isTagetViewController() { return @@ -434,8 +434,8 @@ public class SlideMenuController: UIViewController, UIGestureRecognizerDelegate } switch panGesture.state { - case UIGestureRecognizerState.Began: - if RightPanState.lastState != .Ended && RightPanState.lastState != .Cancelled && RightPanState.lastState != .Failed { + case UIGestureRecognizerState.began: + if RightPanState.lastState != .ended && RightPanState.lastState != .cancelled && RightPanState.lastState != .failed { return } @@ -446,7 +446,7 @@ public class SlideMenuController: UIViewController, UIGestureRecognizerDelegate } RightPanState.frameAtStartOfPan = rightContainerView.frame - RightPanState.startPointOfPan = panGesture.locationInView(view) + RightPanState.startPointOfPan = panGesture.location(in: view) RightPanState.wasOpenAtStartOfPan = isRightOpen() RightPanState.wasHiddenAtStartOfPan = isRightHidden() @@ -454,32 +454,32 @@ public class SlideMenuController: UIViewController, UIGestureRecognizerDelegate addShadowToView(rightContainerView) setOpenWindowLevel() - case UIGestureRecognizerState.Changed: - if RightPanState.lastState != .Began && RightPanState.lastState != .Changed { + case UIGestureRecognizerState.changed: + if RightPanState.lastState != .began && RightPanState.lastState != .changed { return } - let translation: CGPoint = panGesture.translationInView(panGesture.view!) + let translation: CGPoint = panGesture.translation(in: panGesture.view!) rightContainerView.frame = applyRightTranslation(translation, toFrame: RightPanState.frameAtStartOfPan) applyRightOpacity() applyRightContentViewScale() - case UIGestureRecognizerState.Ended, UIGestureRecognizerState.Cancelled: - if RightPanState.lastState != .Changed { + case UIGestureRecognizerState.ended, UIGestureRecognizerState.cancelled: + if RightPanState.lastState != .changed { setCloseWindowLevel() return } - let velocity: CGPoint = panGesture.velocityInView(panGesture.view) + let velocity: CGPoint = panGesture.velocity(in: panGesture.view) let panInfo: PanInfo = panRightResultInfoForVelocity(velocity) - if panInfo.action == .Open { + if panInfo.action == .open { if !RightPanState.wasHiddenAtStartOfPan { rightViewController?.beginAppearanceTransition(true, animated: true) } openRightWithVelocity(panInfo.velocity) - track(.RightFlickOpen) + track(.rightFlickOpen) } else { if RightPanState.wasHiddenAtStartOfPan { rightViewController?.beginAppearanceTransition(false, animated: true) @@ -487,23 +487,23 @@ public class SlideMenuController: UIViewController, UIGestureRecognizerDelegate closeRightWithVelocity(panInfo.velocity) setCloseWindowLevel() - track(.RightFlickClose) + track(.rightFlickClose) } - case UIGestureRecognizerState.Failed, UIGestureRecognizerState.Possible: + case UIGestureRecognizerState.failed, UIGestureRecognizerState.possible: break } RightPanState.lastState = panGesture.state } - public func openLeftWithVelocity(velocity: CGFloat) { + open func openLeftWithVelocity(_ velocity: CGFloat) { let xOrigin: CGFloat = leftContainerView.frame.origin.x let finalXOrigin: CGFloat = 0.0 var frame = leftContainerView.frame; frame.origin.x = finalXOrigin; - var duration: NSTimeInterval = Double(SlideMenuOptions.animationDuration) + var duration: TimeInterval = Double(SlideMenuOptions.animationDuration) if velocity != 0.0 { duration = Double(fabs(xOrigin - finalXOrigin) / velocity) duration = Double(fmax(0.1, fmin(1.0, duration))) @@ -511,12 +511,12 @@ public class SlideMenuController: UIViewController, UIGestureRecognizerDelegate addShadowToView(leftContainerView) - UIView.animateWithDuration(duration, delay: 0.0, options: UIViewAnimationOptions.CurveEaseInOut, animations: { [weak self]() -> Void in + UIView.animate(withDuration: duration, delay: 0.0, options: UIViewAnimationOptions(), animations: { [weak self]() -> Void in if let strongSelf = self { strongSelf.leftContainerView.frame = frame strongSelf.opacityView.layer.opacity = Float(SlideMenuOptions.contentViewOpacity) - SlideMenuOptions.contentViewDrag == true ? (strongSelf.mainContainerView.transform = CGAffineTransformMakeTranslation(SlideMenuOptions.leftViewWidth, 0)) : (strongSelf.mainContainerView.transform = CGAffineTransformMakeScale(SlideMenuOptions.contentViewScale, SlideMenuOptions.contentViewScale)) + SlideMenuOptions.contentViewDrag == true ? (strongSelf.mainContainerView.transform = CGAffineTransform(translationX: SlideMenuOptions.leftViewWidth, y: 0)) : (strongSelf.mainContainerView.transform = CGAffineTransform(scaleX: SlideMenuOptions.contentViewScale, y: SlideMenuOptions.contentViewScale)) } }) { [weak self](Bool) -> Void in @@ -528,29 +528,29 @@ public class SlideMenuController: UIViewController, UIGestureRecognizerDelegate } } - public func openRightWithVelocity(velocity: CGFloat) { + open func openRightWithVelocity(_ velocity: CGFloat) { let xOrigin: CGFloat = rightContainerView.frame.origin.x // CGFloat finalXOrigin = SlideMenuOptions.rightViewOverlapWidth; - let finalXOrigin: CGFloat = CGRectGetWidth(view.bounds) - rightContainerView.frame.size.width + let finalXOrigin: CGFloat = view.bounds.width - rightContainerView.frame.size.width var frame = rightContainerView.frame frame.origin.x = finalXOrigin - var duration: NSTimeInterval = Double(SlideMenuOptions.animationDuration) + var duration: TimeInterval = Double(SlideMenuOptions.animationDuration) if velocity != 0.0 { - duration = Double(fabs(xOrigin - CGRectGetWidth(view.bounds)) / velocity) + duration = Double(fabs(xOrigin - view.bounds.width) / velocity) duration = Double(fmax(0.1, fmin(1.0, duration))) } addShadowToView(rightContainerView) - UIView.animateWithDuration(duration, delay: 0.0, options: UIViewAnimationOptions.CurveEaseInOut, animations: { [weak self]() -> Void in + UIView.animate(withDuration: duration, delay: 0.0, options: UIViewAnimationOptions(), animations: { [weak self]() -> Void in if let strongSelf = self { strongSelf.rightContainerView.frame = frame strongSelf.opacityView.layer.opacity = Float(SlideMenuOptions.contentViewOpacity) - SlideMenuOptions.contentViewDrag == true ? (strongSelf.mainContainerView.transform = CGAffineTransformMakeTranslation(-SlideMenuOptions.rightViewWidth, 0)) : (strongSelf.mainContainerView.transform = CGAffineTransformMakeScale(SlideMenuOptions.contentViewScale, SlideMenuOptions.contentViewScale)) + SlideMenuOptions.contentViewDrag == true ? (strongSelf.mainContainerView.transform = CGAffineTransform(translationX: -SlideMenuOptions.rightViewWidth, y: 0)) : (strongSelf.mainContainerView.transform = CGAffineTransform(scaleX: SlideMenuOptions.contentViewScale, y: SlideMenuOptions.contentViewScale)) } }) { [weak self](Bool) -> Void in if let strongSelf = self { @@ -561,7 +561,7 @@ public class SlideMenuController: UIViewController, UIGestureRecognizerDelegate } } - public func closeLeftWithVelocity(velocity: CGFloat) { + open func closeLeftWithVelocity(_ velocity: CGFloat) { let xOrigin: CGFloat = leftContainerView.frame.origin.x let finalXOrigin: CGFloat = leftMinOrigin() @@ -569,17 +569,17 @@ public class SlideMenuController: UIViewController, UIGestureRecognizerDelegate var frame: CGRect = leftContainerView.frame; frame.origin.x = finalXOrigin - var duration: NSTimeInterval = Double(SlideMenuOptions.animationDuration) + var duration: TimeInterval = Double(SlideMenuOptions.animationDuration) if velocity != 0.0 { duration = Double(fabs(xOrigin - finalXOrigin) / velocity) duration = Double(fmax(0.1, fmin(1.0, duration))) } - UIView.animateWithDuration(duration, delay: 0.0, options: UIViewAnimationOptions.CurveEaseInOut, animations: { [weak self]() -> Void in + UIView.animate(withDuration: duration, delay: 0.0, options: UIViewAnimationOptions(), animations: { [weak self]() -> Void in if let strongSelf = self { strongSelf.leftContainerView.frame = frame strongSelf.opacityView.layer.opacity = 0.0 - strongSelf.mainContainerView.transform = CGAffineTransformMakeScale(1.0, 1.0) + strongSelf.mainContainerView.transform = CGAffineTransform(scaleX: 1.0, y: 1.0) } }) { [weak self](Bool) -> Void in if let strongSelf = self { @@ -592,25 +592,25 @@ public class SlideMenuController: UIViewController, UIGestureRecognizerDelegate } - public func closeRightWithVelocity(velocity: CGFloat) { + open func closeRightWithVelocity(_ velocity: CGFloat) { let xOrigin: CGFloat = rightContainerView.frame.origin.x - let finalXOrigin: CGFloat = CGRectGetWidth(view.bounds) + let finalXOrigin: CGFloat = view.bounds.width var frame: CGRect = rightContainerView.frame frame.origin.x = finalXOrigin - var duration: NSTimeInterval = Double(SlideMenuOptions.animationDuration) + var duration: TimeInterval = Double(SlideMenuOptions.animationDuration) if velocity != 0.0 { - duration = Double(fabs(xOrigin - CGRectGetWidth(view.bounds)) / velocity) + duration = Double(fabs(xOrigin - view.bounds.width) / velocity) duration = Double(fmax(0.1, fmin(1.0, duration))) } - UIView.animateWithDuration(duration, delay: 0.0, options: UIViewAnimationOptions.CurveEaseInOut, animations: { [weak self]() -> Void in + UIView.animate(withDuration: duration, delay: 0.0, options: UIViewAnimationOptions(), animations: { [weak self]() -> Void in if let strongSelf = self { strongSelf.rightContainerView.frame = frame strongSelf.opacityView.layer.opacity = 0.0 - strongSelf.mainContainerView.transform = CGAffineTransformMakeScale(1.0, 1.0) + strongSelf.mainContainerView.transform = CGAffineTransform(scaleX: 1.0, y: 1.0) } }) { [weak self](Bool) -> Void in if let strongSelf = self { @@ -623,47 +623,47 @@ public class SlideMenuController: UIViewController, UIGestureRecognizerDelegate } - public override func toggleLeft() { + open override func toggleLeft() { if isLeftOpen() { closeLeft() setCloseWindowLevel() // Tracking of close tap is put in here. Because closeMenu is due to be call even when the menu tap. - track(.LeftTapClose) + track(.leftTapClose) } else { openLeft() } } - public func isLeftOpen() -> Bool { + open func isLeftOpen() -> Bool { return leftViewController != nil && leftContainerView.frame.origin.x == 0.0 } - public func isLeftHidden() -> Bool { + open func isLeftHidden() -> Bool { return leftContainerView.frame.origin.x <= leftMinOrigin() } - public override func toggleRight() { + open override func toggleRight() { if isRightOpen() { closeRight() setCloseWindowLevel() // Tracking of close tap is put in here. Because closeMenu is due to be call even when the menu tap. - track(.RightTapClose) + track(.rightTapClose) } else { openRight() } } - public func isRightOpen() -> Bool { - return rightViewController != nil && rightContainerView.frame.origin.x == CGRectGetWidth(view.bounds) - rightContainerView.frame.size.width + open func isRightOpen() -> Bool { + return rightViewController != nil && rightContainerView.frame.origin.x == view.bounds.width - rightContainerView.frame.size.width } - public func isRightHidden() -> Bool { - return rightContainerView.frame.origin.x >= CGRectGetWidth(view.bounds) + open func isRightHidden() -> Bool { + return rightContainerView.frame.origin.x >= view.bounds.width } - public func changeMainViewController(mainViewController: UIViewController, close: Bool) { + open func changeMainViewController(_ mainViewController: UIViewController, close: Bool) { removeViewController(self.mainViewController) self.mainViewController = mainViewController @@ -674,7 +674,7 @@ public class SlideMenuController: UIViewController, UIGestureRecognizerDelegate } } - public func changeLeftViewWidth(width: CGFloat) { + open func changeLeftViewWidth(_ width: CGFloat) { SlideMenuOptions.leftViewWidth = width; var leftFrame: CGRect = view.bounds @@ -686,7 +686,7 @@ public class SlideMenuController: UIViewController, UIGestureRecognizerDelegate leftContainerView.frame = leftFrame; } - public func changeRightViewWidth(width: CGFloat) { + open func changeRightViewWidth(_ width: CGFloat) { SlideMenuOptions.rightBezelWidth = width; var rightFrame: CGRect = view.bounds @@ -698,7 +698,7 @@ public class SlideMenuController: UIViewController, UIGestureRecognizerDelegate rightContainerView.frame = rightFrame; } - public func changeLeftViewController(leftViewController: UIViewController, closeLeft:Bool) { + open func changeLeftViewController(_ leftViewController: UIViewController, closeLeft:Bool) { removeViewController(self.leftViewController) self.leftViewController = leftViewController @@ -708,7 +708,7 @@ public class SlideMenuController: UIViewController, UIGestureRecognizerDelegate } } - public func changeRightViewController(rightViewController: UIViewController, closeRight:Bool) { + open func changeRightViewController(_ rightViewController: UIViewController, closeRight:Bool) { removeViewController(self.rightViewController) self.rightViewController = rightViewController; setUpViewController(rightContainerView, targetViewController: rightViewController) @@ -717,58 +717,58 @@ public class SlideMenuController: UIViewController, UIGestureRecognizerDelegate } } - private func leftMinOrigin() -> CGFloat { + fileprivate func leftMinOrigin() -> CGFloat { return -SlideMenuOptions.leftViewWidth } - private func rightMinOrigin() -> CGFloat { - return CGRectGetWidth(view.bounds) + fileprivate func rightMinOrigin() -> CGFloat { + return view.bounds.width } - private func panLeftResultInfoForVelocity(velocity: CGPoint) -> PanInfo { + fileprivate func panLeftResultInfoForVelocity(_ velocity: CGPoint) -> PanInfo { let thresholdVelocity: CGFloat = 1000.0 let pointOfNoReturn: CGFloat = CGFloat(floor(leftMinOrigin())) + SlideMenuOptions.pointOfNoReturnWidth let leftOrigin: CGFloat = leftContainerView.frame.origin.x - var panInfo: PanInfo = PanInfo(action: .Close, shouldBounce: false, velocity: 0.0) + var panInfo: PanInfo = PanInfo(action: .close, shouldBounce: false, velocity: 0.0) - panInfo.action = leftOrigin <= pointOfNoReturn ? .Close : .Open; + panInfo.action = leftOrigin <= pointOfNoReturn ? .close : .open; if velocity.x >= thresholdVelocity { - panInfo.action = .Open + panInfo.action = .open panInfo.velocity = velocity.x } else if velocity.x <= (-1.0 * thresholdVelocity) { - panInfo.action = .Close + panInfo.action = .close panInfo.velocity = velocity.x } return panInfo } - private func panRightResultInfoForVelocity(velocity: CGPoint) -> PanInfo { + fileprivate func panRightResultInfoForVelocity(_ velocity: CGPoint) -> PanInfo { let thresholdVelocity: CGFloat = -1000.0 - let pointOfNoReturn: CGFloat = CGFloat(floor(CGRectGetWidth(view.bounds)) - SlideMenuOptions.pointOfNoReturnWidth) + let pointOfNoReturn: CGFloat = CGFloat(floor(view.bounds.width) - SlideMenuOptions.pointOfNoReturnWidth) let rightOrigin: CGFloat = rightContainerView.frame.origin.x - var panInfo: PanInfo = PanInfo(action: .Close, shouldBounce: false, velocity: 0.0) + var panInfo: PanInfo = PanInfo(action: .close, shouldBounce: false, velocity: 0.0) - panInfo.action = rightOrigin >= pointOfNoReturn ? .Close : .Open + panInfo.action = rightOrigin >= pointOfNoReturn ? .close : .open if velocity.x <= thresholdVelocity { - panInfo.action = .Open + panInfo.action = .open panInfo.velocity = velocity.x } else if (velocity.x >= (-1.0 * thresholdVelocity)) { - panInfo.action = .Close + panInfo.action = .close panInfo.velocity = velocity.x } return panInfo } - private func applyLeftTranslation(translation: CGPoint, toFrame:CGRect) -> CGRect { + fileprivate func applyLeftTranslation(_ translation: CGPoint, toFrame:CGRect) -> CGRect { var newOrigin: CGFloat = toFrame.origin.x newOrigin += translation.x @@ -787,7 +787,7 @@ public class SlideMenuController: UIViewController, UIGestureRecognizerDelegate return newFrame } - private func applyRightTranslation(translation: CGPoint, toFrame: CGRect) -> CGRect { + fileprivate func applyRightTranslation(_ translation: CGPoint, toFrame: CGRect) -> CGRect { var newOrigin: CGFloat = toFrame.origin.x newOrigin += translation.x @@ -806,21 +806,21 @@ public class SlideMenuController: UIViewController, UIGestureRecognizerDelegate return newFrame } - private func getOpenedLeftRatio() -> CGFloat { + fileprivate func getOpenedLeftRatio() -> CGFloat { let width: CGFloat = leftContainerView.frame.size.width let currentPosition: CGFloat = leftContainerView.frame.origin.x - leftMinOrigin() return currentPosition / width } - private func getOpenedRightRatio() -> CGFloat { + fileprivate func getOpenedRightRatio() -> CGFloat { let width: CGFloat = rightContainerView.frame.size.width let currentPosition: CGFloat = rightContainerView.frame.origin.x - return -(currentPosition - CGRectGetWidth(view.bounds)) / width + return -(currentPosition - view.bounds.width) / width } - private func applyLeftOpacity() { + fileprivate func applyLeftOpacity() { let openedLeftRatio: CGFloat = getOpenedLeftRatio() let opacity: CGFloat = SlideMenuOptions.contentViewOpacity * openedLeftRatio @@ -828,125 +828,125 @@ public class SlideMenuController: UIViewController, UIGestureRecognizerDelegate } - private func applyRightOpacity() { + fileprivate func applyRightOpacity() { let openedRightRatio: CGFloat = getOpenedRightRatio() let opacity: CGFloat = SlideMenuOptions.contentViewOpacity * openedRightRatio opacityView.layer.opacity = Float(opacity) } - private func applyLeftContentViewScale() { + fileprivate func applyLeftContentViewScale() { let openedLeftRatio: CGFloat = getOpenedLeftRatio() let scale: CGFloat = 1.0 - ((1.0 - SlideMenuOptions.contentViewScale) * openedLeftRatio); let drag: CGFloat = SlideMenuOptions.leftViewWidth + leftContainerView.frame.origin.x - SlideMenuOptions.contentViewDrag == true ? (mainContainerView.transform = CGAffineTransformMakeTranslation(drag, 0)) : (mainContainerView.transform = CGAffineTransformMakeScale(scale, scale)) + SlideMenuOptions.contentViewDrag == true ? (mainContainerView.transform = CGAffineTransform(translationX: drag, y: 0)) : (mainContainerView.transform = CGAffineTransform(scaleX: scale, y: scale)) } - private func applyRightContentViewScale() { + fileprivate func applyRightContentViewScale() { let openedRightRatio: CGFloat = getOpenedRightRatio() let scale: CGFloat = 1.0 - ((1.0 - SlideMenuOptions.contentViewScale) * openedRightRatio) let drag: CGFloat = rightContainerView.frame.origin.x - mainContainerView.frame.size.width - SlideMenuOptions.contentViewDrag == true ? (mainContainerView.transform = CGAffineTransformMakeTranslation(drag, 0)) : (mainContainerView.transform = CGAffineTransformMakeScale(scale, scale)) + SlideMenuOptions.contentViewDrag == true ? (mainContainerView.transform = CGAffineTransform(translationX: drag, y: 0)) : (mainContainerView.transform = CGAffineTransform(scaleX: scale, y: scale)) } - private func addShadowToView(targetContainerView: UIView) { + fileprivate func addShadowToView(_ targetContainerView: UIView) { targetContainerView.layer.masksToBounds = false targetContainerView.layer.shadowOffset = SlideMenuOptions.shadowOffset targetContainerView.layer.shadowOpacity = Float(SlideMenuOptions.shadowOpacity) targetContainerView.layer.shadowRadius = SlideMenuOptions.shadowRadius - targetContainerView.layer.shadowPath = UIBezierPath(rect: targetContainerView.bounds).CGPath + targetContainerView.layer.shadowPath = UIBezierPath(rect: targetContainerView.bounds).cgPath } - private func removeShadow(targetContainerView: UIView) { + fileprivate func removeShadow(_ targetContainerView: UIView) { targetContainerView.layer.masksToBounds = true mainContainerView.layer.opacity = 1.0 } - private func removeContentOpacity() { + fileprivate func removeContentOpacity() { opacityView.layer.opacity = 0.0 } - private func addContentOpacity() { + fileprivate func addContentOpacity() { opacityView.layer.opacity = Float(SlideMenuOptions.contentViewOpacity) } - private func disableContentInteraction() { - mainContainerView.userInteractionEnabled = false + fileprivate func disableContentInteraction() { + mainContainerView.isUserInteractionEnabled = false } - private func enableContentInteraction() { - mainContainerView.userInteractionEnabled = true + fileprivate func enableContentInteraction() { + mainContainerView.isUserInteractionEnabled = true } - private func setOpenWindowLevel() { + fileprivate func setOpenWindowLevel() { if (SlideMenuOptions.hideStatusBar) { - dispatch_async(dispatch_get_main_queue(), { - if let window = UIApplication.sharedApplication().keyWindow { + DispatchQueue.main.async(execute: { + if let window = UIApplication.shared.keyWindow { window.windowLevel = UIWindowLevelStatusBar + 1 } }) } } - private func setCloseWindowLevel() { + fileprivate func setCloseWindowLevel() { if (SlideMenuOptions.hideStatusBar) { - dispatch_async(dispatch_get_main_queue(), { - if let window = UIApplication.sharedApplication().keyWindow { + DispatchQueue.main.async(execute: { + if let window = UIApplication.shared.keyWindow { window.windowLevel = UIWindowLevelNormal } }) } } - private func setUpViewController(targetView: UIView, targetViewController: UIViewController?) { + fileprivate func setUpViewController(_ targetView: UIView, targetViewController: UIViewController?) { if let viewController = targetViewController { addChildViewController(viewController) viewController.view.frame = targetView.bounds targetView.addSubview(viewController.view) - viewController.didMoveToParentViewController(self) + viewController.didMove(toParentViewController: self) } } - private func removeViewController(viewController: UIViewController?) { + fileprivate func removeViewController(_ viewController: UIViewController?) { if let _viewController = viewController { _viewController.view.layer.removeAllAnimations() - _viewController.willMoveToParentViewController(nil) + _viewController.willMove(toParentViewController: nil) _viewController.view.removeFromSuperview() _viewController.removeFromParentViewController() } } - public func closeLeftNonAnimation(){ + open func closeLeftNonAnimation(){ setCloseWindowLevel() let finalXOrigin: CGFloat = leftMinOrigin() var frame: CGRect = leftContainerView.frame; frame.origin.x = finalXOrigin leftContainerView.frame = frame opacityView.layer.opacity = 0.0 - mainContainerView.transform = CGAffineTransformMakeScale(1.0, 1.0) + mainContainerView.transform = CGAffineTransform(scaleX: 1.0, y: 1.0) removeShadow(leftContainerView) enableContentInteraction() } - public func closeRightNonAnimation(){ + open func closeRightNonAnimation(){ setCloseWindowLevel() - let finalXOrigin: CGFloat = CGRectGetWidth(view.bounds) + let finalXOrigin: CGFloat = view.bounds.width var frame: CGRect = rightContainerView.frame frame.origin.x = finalXOrigin rightContainerView.frame = frame opacityView.layer.opacity = 0.0 - mainContainerView.transform = CGAffineTransformMakeScale(1.0, 1.0) + mainContainerView.transform = CGAffineTransform(scaleX: 1.0, y: 1.0) removeShadow(rightContainerView) enableContentInteraction() } // MARK: UIGestureRecognizerDelegate - public func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldReceiveTouch touch: UITouch) -> Bool { + open func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool { - let point: CGPoint = touch.locationInView(view) + let point: CGPoint = touch.location(in: view) if gestureRecognizer == leftPanGesture { return slideLeftForGestureRecognizer(gestureRecognizer, point: point) @@ -962,52 +962,49 @@ public class SlideMenuController: UIViewController, UIGestureRecognizerDelegate } // returning true here helps if the main view is fullwidth with a scrollview - public func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool { + open func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool { return SlideMenuOptions.simultaneousGestureRecognizers } - private func slideLeftForGestureRecognizer( gesture: UIGestureRecognizer, point:CGPoint) -> Bool{ + fileprivate func slideLeftForGestureRecognizer( _ gesture: UIGestureRecognizer, point:CGPoint) -> Bool{ return isLeftOpen() || SlideMenuOptions.panFromBezel && isLeftPointContainedWithinBezelRect(point) } - private func isLeftPointContainedWithinBezelRect(point: CGPoint) -> Bool{ + fileprivate func isLeftPointContainedWithinBezelRect(_ point: CGPoint) -> Bool{ if let bezelWidth = SlideMenuOptions.leftBezelWidth { - var leftBezelRect: CGRect = CGRectZero - var tempRect: CGRect = CGRectZero - - CGRectDivide(view.bounds, &leftBezelRect, &tempRect, bezelWidth, CGRectEdge.MinXEdge) - return CGRectContainsPoint(leftBezelRect, point) + var leftBezelRect: CGRect = CGRect.zero + let tuple = view.bounds.divided(atDistance: bezelWidth, from: CGRectEdge.minXEdge) + leftBezelRect = tuple.slice + return leftBezelRect.contains(point) } else { return true } } - private func isPointContainedWithinLeftRect(point: CGPoint) -> Bool { - return CGRectContainsPoint(leftContainerView.frame, point) + fileprivate func isPointContainedWithinLeftRect(_ point: CGPoint) -> Bool { + return leftContainerView.frame.contains(point) } - private func slideRightViewForGestureRecognizer(gesture: UIGestureRecognizer, withTouchPoint point: CGPoint) -> Bool { + fileprivate func slideRightViewForGestureRecognizer(_ gesture: UIGestureRecognizer, withTouchPoint point: CGPoint) -> Bool { return isRightOpen() || SlideMenuOptions.rightPanFromBezel && isRightPointContainedWithinBezelRect(point) } - private func isRightPointContainedWithinBezelRect(point: CGPoint) -> Bool { + fileprivate func isRightPointContainedWithinBezelRect(_ point: CGPoint) -> Bool { if let rightBezelWidth = SlideMenuOptions.rightBezelWidth { - var rightBezelRect: CGRect = CGRectZero - var tempRect: CGRect = CGRectZero - let bezelWidth: CGFloat = CGRectGetWidth(view.bounds) - rightBezelWidth - - CGRectDivide(view.bounds, &tempRect, &rightBezelRect, bezelWidth, CGRectEdge.MinXEdge) - - return CGRectContainsPoint(rightBezelRect, point) + var rightBezelRect: CGRect = CGRect.zero + let bezelWidth: CGFloat = view.bounds.width - rightBezelWidth + let tuple = view.bounds.divided(atDistance: bezelWidth, from: CGRectEdge.minXEdge) + rightBezelRect = tuple.remainder + return rightBezelRect.contains(point) } else { return true } } - private func isPointContainedWithinRightRect(point: CGPoint) -> Bool { - return CGRectContainsPoint(rightContainerView.frame, point) + fileprivate func isPointContainedWithinRightRect(_ point: CGPoint) -> Bool { + return rightContainerView.frame.contains(point) } } @@ -1021,18 +1018,18 @@ extension UIViewController { if viewController is SlideMenuController { return viewController as? SlideMenuController } - viewController = viewController?.parentViewController + viewController = viewController?.parent } return nil; } - public func addLeftBarButtonWithImage(buttonImage: UIImage) { - let leftButton: UIBarButtonItem = UIBarButtonItem(image: buttonImage, style: UIBarButtonItemStyle.Plain, target: self, action: #selector(self.toggleLeft)) + public func addLeftBarButtonWithImage(_ buttonImage: UIImage) { + let leftButton: UIBarButtonItem = UIBarButtonItem(image: buttonImage, style: UIBarButtonItemStyle.plain, target: self, action: #selector(self.toggleLeft)) navigationItem.leftBarButtonItem = leftButton; } - public func addRightBarButtonWithImage(buttonImage: UIImage) { - let rightButton: UIBarButtonItem = UIBarButtonItem(image: buttonImage, style: UIBarButtonItemStyle.Plain, target: self, action: #selector(self.toggleRight)) + public func addRightBarButtonWithImage(_ buttonImage: UIImage) { + let rightButton: UIBarButtonItem = UIBarButtonItem(image: buttonImage, style: UIBarButtonItemStyle.plain, target: self, action: #selector(self.toggleRight)) navigationItem.rightBarButtonItem = rightButton; } @@ -1060,12 +1057,12 @@ extension UIViewController { } // Please specify if you want menu gesuture give priority to than targetScrollView - public func addPriorityToMenuGesuture(targetScrollView: UIScrollView) { + public func addPriorityToMenuGesuture(_ targetScrollView: UIScrollView) { guard let slideController = slideMenuController(), let recognizers = slideController.view.gestureRecognizers else { return } for recognizer in recognizers where recognizer is UIPanGestureRecognizer { - targetScrollView.panGestureRecognizer.requireGestureRecognizerToFail(recognizer) + targetScrollView.panGestureRecognizer.require(toFail: recognizer) } } } From b5c2300fdc40b8dc8e383c3a71e6ecf856a7fc61 Mon Sep 17 00:00:00 2001 From: dekatotoro Date: Mon, 12 Sep 2016 13:31:24 +0900 Subject: [PATCH 09/36] Fixed not display profile image. --- SlideMenuControllerSwift/ImageHeaderView.swift | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/SlideMenuControllerSwift/ImageHeaderView.swift b/SlideMenuControllerSwift/ImageHeaderView.swift index b19106f..b2dc4d4 100644 --- a/SlideMenuControllerSwift/ImageHeaderView.swift +++ b/SlideMenuControllerSwift/ImageHeaderView.swift @@ -16,11 +16,12 @@ class ImageHeaderView : UIView { override func awakeFromNib() { super.awakeFromNib() self.backgroundColor = UIColor(hex: "E0E0E0") - self.profileImage.layer.cornerRadius = self.profileImage.frame.size.height / 2 + self.profileImage.layoutIfNeeded() + self.profileImage.layer.cornerRadius = self.profileImage.bounds.size.height / 2 self.profileImage.clipsToBounds = true self.profileImage.layer.borderWidth = 1 self.profileImage.layer.borderColor = UIColor.white.cgColor self.profileImage.setRandomDownloadImage(80, height: 80) - self.backgroundImage.setRandomDownloadImage(Int(self.frame.size.width), height: 160) + self.backgroundImage.setRandomDownloadImage(Int(self.bounds.size.width), height: 160) } } From 43e5a25051daab96d3b2c7e8c974c34b9f129ff0 Mon Sep 17 00:00:00 2001 From: dekatotoro Date: Mon, 12 Sep 2016 13:32:35 +0900 Subject: [PATCH 10/36] Update podspec and CHANGELOG. --- CHANGELOG.md | 10 ++++++++++ SlideMenuControllerSwift.podspec | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a49408d..d53e88b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,13 @@ +3.0.0 Release notes (2016-09-12) +============================================================= + +### Enhancements +* Support Swift3.0 + +### Bugfixes +* None. + + 2.3.0 Release notes (2016-09-12) ============================================================= diff --git a/SlideMenuControllerSwift.podspec b/SlideMenuControllerSwift.podspec index bead23b..252b1e0 100644 --- a/SlideMenuControllerSwift.podspec +++ b/SlideMenuControllerSwift.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = "SlideMenuControllerSwift" - s.version = "2.3.0" + s.version = "3.0.0" s.summary = "iOS Slide View based on iQON, Feedly, Google+, Ameba iPhone app." s.homepage = "https://github.com/dekatotoro/SlideMenuControllerSwift" s.license = { :type => "MIT", :file => "LICENSE" } From e7be2a1d8876d3aa9156692ed23d7c3adc59d6dd Mon Sep 17 00:00:00 2001 From: Yuji Hato Date: Mon, 12 Sep 2016 15:09:41 +0900 Subject: [PATCH 11/36] Update README.md --- README.md | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 359e952..a5959f8 100644 --- a/README.md +++ b/README.md @@ -128,11 +128,9 @@ func rightDidClose() ``` ## Requirements -Requires Swift2.0 and iOS 8.0 and ARC. -If you are developing in the swift1.1, please use branch of swift1.1. -If you are developing in the swift1.2, please use branch of swift1.2. -If you are developing in the swift2.1, please use branch of swift2.1. -If you want to use even iOS7.0, please to import the code directly. +Requires Swift3.0 and iOS 8.0 and ARC. +If you are developing in the Swift1.1 ~ 2.3, please use branch of swift1.1 ~ 2.3. +If you want to use even iOS8.0, please to import the code directly. If you want to use objective-c even iOS6.0, plesea use [SlideMenuControllerOC](https://github.com/Pluto-Y/SlideMenuControllerOC). ## Features From e21d9a7b8f1e5c052fc8abecba8961b69fc576d4 Mon Sep 17 00:00:00 2001 From: dekatotoro Date: Wed, 14 Sep 2016 11:37:54 +0900 Subject: [PATCH 12/36] Add swift-version file for CocoaPods --- .swift-version | 1 + 1 file changed, 1 insertion(+) create mode 100644 .swift-version diff --git a/.swift-version b/.swift-version new file mode 100644 index 0000000..9f55b2c --- /dev/null +++ b/.swift-version @@ -0,0 +1 @@ +3.0 From e471d1e5ca5156f934f7d0738ce6109a63c2f82c Mon Sep 17 00:00:00 2001 From: zirinisp Date: Wed, 28 Sep 2016 10:29:44 +0300 Subject: [PATCH 13/36] Carthage could not compile (Use Legacy Swift Language Version was not set) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Use Legacy Swift Language version was set to undefined and carthage could not compile. I set it to ‘No’ and now it compiles without issues. --- SlideMenuControllerSwift.xcodeproj/project.pbxproj | 2 ++ 1 file changed, 2 insertions(+) diff --git a/SlideMenuControllerSwift.xcodeproj/project.pbxproj b/SlideMenuControllerSwift.xcodeproj/project.pbxproj index a6b6895..1498679 100644 --- a/SlideMenuControllerSwift.xcodeproj/project.pbxproj +++ b/SlideMenuControllerSwift.xcodeproj/project.pbxproj @@ -559,6 +559,7 @@ ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 3.0; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; @@ -598,6 +599,7 @@ MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 3.0; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; }; From 76fcd6256da2ba41a3e7eee47bf803cba7c8a0ad Mon Sep 17 00:00:00 2001 From: zirinisp Date: Wed, 28 Sep 2016 11:27:29 +0300 Subject: [PATCH 14/36] trial as use legacy does not work --- SlideMenuControllerSwift.xcodeproj/project.pbxproj | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/SlideMenuControllerSwift.xcodeproj/project.pbxproj b/SlideMenuControllerSwift.xcodeproj/project.pbxproj index 1498679..2a575ea 100644 --- a/SlideMenuControllerSwift.xcodeproj/project.pbxproj +++ b/SlideMenuControllerSwift.xcodeproj/project.pbxproj @@ -487,6 +487,7 @@ PRODUCT_BUNDLE_IDENTIFIER = dekatotoro.SlideMenuControllerSwift; PRODUCT_NAME = "$(PROJECT_NAME)"; SKIP_INSTALL = YES; + SWIFT_VERSION = 3.0; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; @@ -511,6 +512,7 @@ PRODUCT_BUNDLE_IDENTIFIER = dekatotoro.SlideMenuControllerSwift; PRODUCT_NAME = "$(PROJECT_NAME)"; SKIP_INSTALL = YES; + SWIFT_VERSION = 3.0; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; @@ -559,7 +561,6 @@ ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 3.0; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; @@ -599,7 +600,6 @@ MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 3.0; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; }; @@ -614,7 +614,6 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "dekatotoro.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 3.0; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; @@ -628,7 +627,6 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "dekatotoro.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 3.0; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Release; @@ -646,7 +644,6 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "dekatotoro.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 3.0; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/SlideMenuControllerSwift.app/SlideMenuControllerSwift"; }; name = Debug; @@ -660,7 +657,6 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "dekatotoro.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 3.0; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/SlideMenuControllerSwift.app/SlideMenuControllerSwift"; }; name = Release; From daad5b0b84e32d202cb57ea6894038c475fb5bf0 Mon Sep 17 00:00:00 2001 From: zirinisp Date: Wed, 28 Sep 2016 11:34:19 +0300 Subject: [PATCH 15/36] Trial use legacy --- SlideMenuControllerSwift.xcodeproj/project.pbxproj | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/SlideMenuControllerSwift.xcodeproj/project.pbxproj b/SlideMenuControllerSwift.xcodeproj/project.pbxproj index 2a575ea..27218c3 100644 --- a/SlideMenuControllerSwift.xcodeproj/project.pbxproj +++ b/SlideMenuControllerSwift.xcodeproj/project.pbxproj @@ -488,6 +488,7 @@ PRODUCT_NAME = "$(PROJECT_NAME)"; SKIP_INSTALL = YES; SWIFT_VERSION = 3.0; + USE_LEGACY_SWIFT_LANGUAGE_VERSION = NO; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; @@ -513,6 +514,7 @@ PRODUCT_NAME = "$(PROJECT_NAME)"; SKIP_INSTALL = YES; SWIFT_VERSION = 3.0; + USE_LEGACY_SWIFT_LANGUAGE_VERSION = NO; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; @@ -561,7 +563,9 @@ ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 3.0; TARGETED_DEVICE_FAMILY = "1,2"; + USE_LEGACY_SWIFT_LANGUAGE_VERSION = NO; }; name = Debug; }; @@ -600,7 +604,9 @@ MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 3.0; TARGETED_DEVICE_FAMILY = "1,2"; + USE_LEGACY_SWIFT_LANGUAGE_VERSION = NO; VALIDATE_PRODUCT = YES; }; name = Release; @@ -614,6 +620,8 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "dekatotoro.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 3.0; + USE_LEGACY_SWIFT_LANGUAGE_VERSION=NO; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; @@ -627,6 +635,8 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "dekatotoro.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 3.0; + USE_LEGACY_SWIFT_LANGUAGE_VERSION=NO; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Release; From 6168a9d8d743d0c72cd2ac5abfbb7226a80a39d3 Mon Sep 17 00:00:00 2001 From: zirinisp Date: Wed, 28 Sep 2016 11:45:11 +0300 Subject: [PATCH 16/36] Reverted back to initial commit I was not using a new version and all changes were discarded. --- SlideMenuControllerSwift.xcodeproj/project.pbxproj | 6 ------ 1 file changed, 6 deletions(-) diff --git a/SlideMenuControllerSwift.xcodeproj/project.pbxproj b/SlideMenuControllerSwift.xcodeproj/project.pbxproj index 27218c3..88ddd14 100644 --- a/SlideMenuControllerSwift.xcodeproj/project.pbxproj +++ b/SlideMenuControllerSwift.xcodeproj/project.pbxproj @@ -488,7 +488,6 @@ PRODUCT_NAME = "$(PROJECT_NAME)"; SKIP_INSTALL = YES; SWIFT_VERSION = 3.0; - USE_LEGACY_SWIFT_LANGUAGE_VERSION = NO; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; @@ -514,7 +513,6 @@ PRODUCT_NAME = "$(PROJECT_NAME)"; SKIP_INSTALL = YES; SWIFT_VERSION = 3.0; - USE_LEGACY_SWIFT_LANGUAGE_VERSION = NO; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; @@ -565,7 +563,6 @@ SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 3.0; TARGETED_DEVICE_FAMILY = "1,2"; - USE_LEGACY_SWIFT_LANGUAGE_VERSION = NO; }; name = Debug; }; @@ -606,7 +603,6 @@ SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; SWIFT_VERSION = 3.0; TARGETED_DEVICE_FAMILY = "1,2"; - USE_LEGACY_SWIFT_LANGUAGE_VERSION = NO; VALIDATE_PRODUCT = YES; }; name = Release; @@ -621,7 +617,6 @@ PRODUCT_BUNDLE_IDENTIFIER = "dekatotoro.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 3.0; - USE_LEGACY_SWIFT_LANGUAGE_VERSION=NO; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; @@ -636,7 +631,6 @@ PRODUCT_BUNDLE_IDENTIFIER = "dekatotoro.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 3.0; - USE_LEGACY_SWIFT_LANGUAGE_VERSION=NO; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Release; From 4e33c09a766b793dad44d889de3e1088b0713d71 Mon Sep 17 00:00:00 2001 From: Andres Silva Date: Fri, 14 Oct 2016 17:13:26 -0500 Subject: [PATCH 17/36] Carthage fix --- SlideMenuControllerSwift.xcodeproj/project.pbxproj | 1 + 1 file changed, 1 insertion(+) diff --git a/SlideMenuControllerSwift.xcodeproj/project.pbxproj b/SlideMenuControllerSwift.xcodeproj/project.pbxproj index 88ddd14..8bfa5f1 100644 --- a/SlideMenuControllerSwift.xcodeproj/project.pbxproj +++ b/SlideMenuControllerSwift.xcodeproj/project.pbxproj @@ -628,6 +628,7 @@ INFOPLIST_FILE = SlideMenuControllerSwift/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + ONLY_ACTIVE_ARCH = YES; PRODUCT_BUNDLE_IDENTIFIER = "dekatotoro.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 3.0; From ae0c75d3040bef2ad6308c68bbb038d7bb28241e Mon Sep 17 00:00:00 2001 From: Nathan Date: Tue, 1 Nov 2016 08:42:29 +1100 Subject: [PATCH 18/36] Remove semicolon. --- Source/SlideMenuController.swift | 38 ++++++++++++++++---------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/Source/SlideMenuController.swift b/Source/SlideMenuController.swift index 7f6d7b9..1becec0 100644 --- a/Source/SlideMenuController.swift +++ b/Source/SlideMenuController.swift @@ -132,7 +132,7 @@ open class SlideMenuController: UIViewController, UIGestureRecognizerDelegate { if leftViewController != nil { var leftFrame: CGRect = view.bounds leftFrame.size.width = SlideMenuOptions.leftViewWidth - leftFrame.origin.x = leftMinOrigin(); + leftFrame.origin.x = leftMinOrigin() let leftOffset: CGFloat = 0 leftFrame.origin.y = leftFrame.origin.y + leftOffset leftFrame.size.height = leftFrame.size.height - leftOffset @@ -148,7 +148,7 @@ open class SlideMenuController: UIViewController, UIGestureRecognizerDelegate { rightFrame.size.width = SlideMenuOptions.rightViewWidth rightFrame.origin.x = rightMinOrigin() let rightOffset: CGFloat = 0 - rightFrame.origin.y = rightFrame.origin.y + rightOffset; + rightFrame.origin.y = rightFrame.origin.y + rightOffset rightFrame.size.height = rightFrame.size.height - rightOffset rightContainerView = UIView(frame: rightFrame) rightContainerView.backgroundColor = UIColor.clear @@ -500,8 +500,8 @@ open class SlideMenuController: UIViewController, UIGestureRecognizerDelegate { let xOrigin: CGFloat = leftContainerView.frame.origin.x let finalXOrigin: CGFloat = 0.0 - var frame = leftContainerView.frame; - frame.origin.x = finalXOrigin; + var frame = leftContainerView.frame + frame.origin.x = finalXOrigin var duration: TimeInterval = Double(SlideMenuOptions.animationDuration) if velocity != 0.0 { @@ -531,7 +531,7 @@ open class SlideMenuController: UIViewController, UIGestureRecognizerDelegate { open func openRightWithVelocity(_ velocity: CGFloat) { let xOrigin: CGFloat = rightContainerView.frame.origin.x - // CGFloat finalXOrigin = SlideMenuOptions.rightViewOverlapWidth; + // CGFloat finalXOrigin = SlideMenuOptions.rightViewOverlapWidth let finalXOrigin: CGFloat = view.bounds.width - rightContainerView.frame.size.width var frame = rightContainerView.frame @@ -566,7 +566,7 @@ open class SlideMenuController: UIViewController, UIGestureRecognizerDelegate { let xOrigin: CGFloat = leftContainerView.frame.origin.x let finalXOrigin: CGFloat = leftMinOrigin() - var frame: CGRect = leftContainerView.frame; + var frame: CGRect = leftContainerView.frame frame.origin.x = finalXOrigin var duration: TimeInterval = Double(SlideMenuOptions.animationDuration) @@ -676,26 +676,26 @@ open class SlideMenuController: UIViewController, UIGestureRecognizerDelegate { open func changeLeftViewWidth(_ width: CGFloat) { - SlideMenuOptions.leftViewWidth = width; + SlideMenuOptions.leftViewWidth = width var leftFrame: CGRect = view.bounds leftFrame.size.width = width - leftFrame.origin.x = leftMinOrigin(); + leftFrame.origin.x = leftMinOrigin() let leftOffset: CGFloat = 0 leftFrame.origin.y = leftFrame.origin.y + leftOffset leftFrame.size.height = leftFrame.size.height - leftOffset - leftContainerView.frame = leftFrame; + leftContainerView.frame = leftFrame } open func changeRightViewWidth(_ width: CGFloat) { - SlideMenuOptions.rightBezelWidth = width; + SlideMenuOptions.rightBezelWidth = width var rightFrame: CGRect = view.bounds rightFrame.size.width = width rightFrame.origin.x = rightMinOrigin() let rightOffset: CGFloat = 0 - rightFrame.origin.y = rightFrame.origin.y + rightOffset; + rightFrame.origin.y = rightFrame.origin.y + rightOffset rightFrame.size.height = rightFrame.size.height - rightOffset - rightContainerView.frame = rightFrame; + rightContainerView.frame = rightFrame } open func changeLeftViewController(_ leftViewController: UIViewController, closeLeft:Bool) { @@ -710,7 +710,7 @@ open class SlideMenuController: UIViewController, UIGestureRecognizerDelegate { open func changeRightViewController(_ rightViewController: UIViewController, closeRight:Bool) { removeViewController(self.rightViewController) - self.rightViewController = rightViewController; + self.rightViewController = rightViewController setUpViewController(rightContainerView, targetViewController: rightViewController) if closeRight { self.closeRight() @@ -734,7 +734,7 @@ open class SlideMenuController: UIViewController, UIGestureRecognizerDelegate { var panInfo: PanInfo = PanInfo(action: .close, shouldBounce: false, velocity: 0.0) - panInfo.action = leftOrigin <= pointOfNoReturn ? .close : .open; + panInfo.action = leftOrigin <= pointOfNoReturn ? .close : .open if velocity.x >= thresholdVelocity { panInfo.action = .open @@ -836,7 +836,7 @@ open class SlideMenuController: UIViewController, UIGestureRecognizerDelegate { fileprivate func applyLeftContentViewScale() { let openedLeftRatio: CGFloat = getOpenedLeftRatio() - let scale: CGFloat = 1.0 - ((1.0 - SlideMenuOptions.contentViewScale) * openedLeftRatio); + let scale: CGFloat = 1.0 - ((1.0 - SlideMenuOptions.contentViewScale) * openedLeftRatio) let drag: CGFloat = SlideMenuOptions.leftViewWidth + leftContainerView.frame.origin.x SlideMenuOptions.contentViewDrag == true ? (mainContainerView.transform = CGAffineTransform(translationX: drag, y: 0)) : (mainContainerView.transform = CGAffineTransform(scaleX: scale, y: scale)) @@ -922,7 +922,7 @@ open class SlideMenuController: UIViewController, UIGestureRecognizerDelegate { open func closeLeftNonAnimation(){ setCloseWindowLevel() let finalXOrigin: CGFloat = leftMinOrigin() - var frame: CGRect = leftContainerView.frame; + var frame: CGRect = leftContainerView.frame frame.origin.x = finalXOrigin leftContainerView.frame = frame opacityView.layer.opacity = 0.0 @@ -1020,17 +1020,17 @@ extension UIViewController { } viewController = viewController?.parent } - return nil; + return nil } public func addLeftBarButtonWithImage(_ buttonImage: UIImage) { let leftButton: UIBarButtonItem = UIBarButtonItem(image: buttonImage, style: UIBarButtonItemStyle.plain, target: self, action: #selector(self.toggleLeft)) - navigationItem.leftBarButtonItem = leftButton; + navigationItem.leftBarButtonItem = leftButton } public func addRightBarButtonWithImage(_ buttonImage: UIImage) { let rightButton: UIBarButtonItem = UIBarButtonItem(image: buttonImage, style: UIBarButtonItemStyle.plain, target: self, action: #selector(self.toggleRight)) - navigationItem.rightBarButtonItem = rightButton; + navigationItem.rightBarButtonItem = rightButton } public func toggleLeft() { From 70a0eb4ba96d95933cddc1b61a71a1aba0f38eea Mon Sep 17 00:00:00 2001 From: Guillaume BITAUDEAU Date: Mon, 28 Nov 2016 15:41:27 +0100 Subject: [PATCH 19/36] Avoid multiple addChildViewController to keep a clean view hierarchy --- Source/SlideMenuController.swift | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/Source/SlideMenuController.swift b/Source/SlideMenuController.swift index 7f6d7b9..1c0c3bc 100644 --- a/Source/SlideMenuController.swift +++ b/Source/SlideMenuController.swift @@ -902,10 +902,13 @@ open class SlideMenuController: UIViewController, UIGestureRecognizerDelegate { fileprivate func setUpViewController(_ targetView: UIView, targetViewController: UIViewController?) { if let viewController = targetViewController { - addChildViewController(viewController) viewController.view.frame = targetView.bounds - targetView.addSubview(viewController.view) - viewController.didMove(toParentViewController: self) + + if (!childViewControllers.contains(viewController)) { + addChildViewController(viewController) + targetView.addSubview(viewController.view) + viewController.didMove(toParentViewController: self) + } } } From e37720c93e0dcdfdd04465d1746f798515f9b524 Mon Sep 17 00:00:00 2001 From: Guillaume BITAUDEAU Date: Mon, 28 Nov 2016 15:44:29 +0100 Subject: [PATCH 20/36] Remove extra call to viewWillAppear --- Source/SlideMenuController.swift | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Source/SlideMenuController.swift b/Source/SlideMenuController.swift index 1c0c3bc..32272fe 100644 --- a/Source/SlideMenuController.swift +++ b/Source/SlideMenuController.swift @@ -189,7 +189,8 @@ open class SlideMenuController: UIViewController, UIGestureRecognizerDelegate { override open func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) - self.mainViewController?.viewWillAppear(animated) + //automatically called + //self.mainViewController?.viewWillAppear(animated) } open override var supportedInterfaceOrientations : UIInterfaceOrientationMask { From 37e771330d81339c2fae90146c48fc44db73f17f Mon Sep 17 00:00:00 2001 From: Vladimir Burdukov Date: Thu, 1 Dec 2016 13:25:51 +0300 Subject: [PATCH 21/36] Changed podspec to load only swift sources --- SlideMenuControllerSwift.podspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SlideMenuControllerSwift.podspec b/SlideMenuControllerSwift.podspec index 252b1e0..4f28c25 100644 --- a/SlideMenuControllerSwift.podspec +++ b/SlideMenuControllerSwift.podspec @@ -9,7 +9,7 @@ Pod::Spec.new do |s| s.platform = :ios s.ios.deployment_target = "8.0" s.source = { :git => "https://github.com/dekatotoro/SlideMenuControllerSwift.git", :tag => s.version } - s.source_files = "Source/*" + s.source_files = "Source/*.swift" s.requires_arc = true end From 5a2064cf7da94d68046d9e7643d594b024e87537 Mon Sep 17 00:00:00 2001 From: dekatotoro Date: Fri, 2 Dec 2016 17:01:49 +0900 Subject: [PATCH 22/36] Modified .gitignore --- .gitignore | 40 +++++++++++++++++++++++++++++++++++----- 1 file changed, 35 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index 5192b08..b2e3198 100644 --- a/.gitignore +++ b/.gitignore @@ -1,10 +1,40 @@ +# Mac OSX +# +.DS_Store + +# Xcode +# +build/ +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 +xcuserdata +*.xccheckout +*.moved-aside +DerivedData +*.hmap +*.ipa +*.xcuserstate +*.xcscmblueprint + # CocoaPods # # We recommend against adding the Pods directory to your .gitignore. However # you should judge for yourself, the pros and cons are mentioned at: -# http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control? +# http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control # -xcuserdata/ -*.xccheckout -*.gcno -*.gcda +# Pods/ + +# Carthage +# +# Add this line if you want to avoid checking in source code from Carthage dependencies. +# Carthage/Checkouts + +Carthage/Build + + From 9960941acbb0d8b3a834177f9a4e373b6e75f7a9 Mon Sep 17 00:00:00 2001 From: dekatotoro Date: Fri, 2 Dec 2016 17:04:33 +0900 Subject: [PATCH 23/36] Delete unnecessary () --- Source/SlideMenuController.swift | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/Source/SlideMenuController.swift b/Source/SlideMenuController.swift index 9c97293..edd56d4 100644 --- a/Source/SlideMenuController.swift +++ b/Source/SlideMenuController.swift @@ -268,8 +268,8 @@ open class SlideMenuController: UIViewController, UIGestureRecognizerDelegate { open func addLeftGestures() { - if (leftViewController != nil) { - if (SlideMenuOptions.panGesturesEnabled) { + if leftViewController != nil { + if SlideMenuOptions.panGesturesEnabled { if leftPanGesture == nil { leftPanGesture = UIPanGestureRecognizer(target: self, action: #selector(self.handleLeftPanGesture(_:))) leftPanGesture!.delegate = self @@ -277,7 +277,7 @@ open class SlideMenuController: UIViewController, UIGestureRecognizerDelegate { } } - if (SlideMenuOptions.tapGesturesEnabled) { + if SlideMenuOptions.tapGesturesEnabled { if leftTapGesture == nil { leftTapGesture = UITapGestureRecognizer(target: self, action: #selector(self.toggleLeft)) leftTapGesture!.delegate = self @@ -289,8 +289,8 @@ open class SlideMenuController: UIViewController, UIGestureRecognizerDelegate { open func addRightGestures() { - if (rightViewController != nil) { - if (SlideMenuOptions.panGesturesEnabled) { + if rightViewController != nil { + if SlideMenuOptions.panGesturesEnabled { if rightPanGesture == nil { rightPanGesture = UIPanGestureRecognizer(target: self, action: #selector(self.handleRightPanGesture(_:))) rightPanGesture!.delegate = self @@ -298,7 +298,7 @@ open class SlideMenuController: UIViewController, UIGestureRecognizerDelegate { } } - if (SlideMenuOptions.tapGesturesEnabled) { + if SlideMenuOptions.tapGesturesEnabled { if rightTapGesture == nil { rightTapGesture = UITapGestureRecognizer(target: self, action: #selector(self.toggleRight)) rightTapGesture!.delegate = self @@ -678,7 +678,7 @@ open class SlideMenuController: UIViewController, UIGestureRecognizerDelegate { removeViewController(self.mainViewController) self.mainViewController = mainViewController setUpViewController(mainContainerView, targetViewController: mainViewController) - if (close) { + if close { closeLeft() closeRight() } @@ -770,7 +770,7 @@ open class SlideMenuController: UIViewController, UIGestureRecognizerDelegate { if velocity.x <= thresholdVelocity { panInfo.action = .open panInfo.velocity = velocity.x - } else if (velocity.x >= (-1.0 * thresholdVelocity)) { + } else if velocity.x >= (-1.0 * thresholdVelocity) { panInfo.action = .close panInfo.velocity = velocity.x } @@ -891,7 +891,7 @@ open class SlideMenuController: UIViewController, UIGestureRecognizerDelegate { } fileprivate func setOpenWindowLevel() { - if (SlideMenuOptions.hideStatusBar) { + if SlideMenuOptions.hideStatusBar { DispatchQueue.main.async(execute: { if let window = UIApplication.shared.keyWindow { window.windowLevel = UIWindowLevelStatusBar + 1 @@ -901,7 +901,7 @@ open class SlideMenuController: UIViewController, UIGestureRecognizerDelegate { } fileprivate func setCloseWindowLevel() { - if (SlideMenuOptions.hideStatusBar) { + if SlideMenuOptions.hideStatusBar { DispatchQueue.main.async(execute: { if let window = UIApplication.shared.keyWindow { window.windowLevel = UIWindowLevelNormal From f533367c5dcd98bacfb1b30d6a249fe56369f5fe Mon Sep 17 00:00:00 2001 From: dekatotoro Date: Fri, 2 Dec 2016 17:15:22 +0900 Subject: [PATCH 24/36] Version up to 3.0.1 --- SlideMenuControllerSwift.podspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SlideMenuControllerSwift.podspec b/SlideMenuControllerSwift.podspec index 4f28c25..76e760a 100644 --- a/SlideMenuControllerSwift.podspec +++ b/SlideMenuControllerSwift.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = "SlideMenuControllerSwift" - s.version = "3.0.0" + s.version = "3.0.1" s.summary = "iOS Slide View based on iQON, Feedly, Google+, Ameba iPhone app." s.homepage = "https://github.com/dekatotoro/SlideMenuControllerSwift" s.license = { :type => "MIT", :file => "LICENSE" } From 087c95ac14010c50cdb48531c040665cd5b7fe3a Mon Sep 17 00:00:00 2001 From: dekatotoro Date: Fri, 2 Dec 2016 17:15:35 +0900 Subject: [PATCH 25/36] Update CHANGELOG.md --- CHANGELOG.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d53e88b..2461efc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,13 @@ +3.0.1 Release notes (2016-12-02) +============================================================= + +### Enhancements +* None. + +### Bugfixes +* Fix project settings. + + 3.0.0 Release notes (2016-09-12) ============================================================= From 4be6fda0fb090ee9cf6427b806762527beae7cc3 Mon Sep 17 00:00:00 2001 From: dekatotoro Date: Fri, 2 Dec 2016 17:20:42 +0900 Subject: [PATCH 26/36] Update CHANGELOG.md --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2461efc..f2f0c81 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,8 @@ ============================================================= ### Enhancements -* None. +* Added options `panGesturesEnabled` and `tapGesturesEnabled`. + Options defaults are of course set to enabled/true so no impact to anyone already using this. ### Bugfixes * Fix project settings. From 75ce993e495b2af52976f0621eed070b285d6735 Mon Sep 17 00:00:00 2001 From: Serhii Butenko Date: Tue, 14 Feb 2017 15:36:57 +0200 Subject: [PATCH 27/36] Add animation options to Slide menu options --- Source/SlideMenuController.swift | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/Source/SlideMenuController.swift b/Source/SlideMenuController.swift index edd56d4..ccc2667 100644 --- a/Source/SlideMenuController.swift +++ b/Source/SlideMenuController.swift @@ -29,6 +29,7 @@ public struct SlideMenuOptions { public static var shadowOffset: CGSize = CGSize(width: 0,height: 0) public static var panFromBezel: Bool = true public static var animationDuration: CGFloat = 0.4 + public static var animationOptions: UIViewAnimationOptions = [] public static var rightViewWidth: CGFloat = 270.0 public static var rightBezelWidth: CGFloat? = 16.0 public static var rightPanFromBezel: Bool = true @@ -521,7 +522,7 @@ open class SlideMenuController: UIViewController, UIGestureRecognizerDelegate { addShadowToView(leftContainerView) - UIView.animate(withDuration: duration, delay: 0.0, options: UIViewAnimationOptions(), animations: { [weak self]() -> Void in + UIView.animate(withDuration: duration, delay: 0.0, options: SlideMenuOptions.animationOptions, animations: { [weak self]() -> Void in if let strongSelf = self { strongSelf.leftContainerView.frame = frame strongSelf.opacityView.layer.opacity = Float(SlideMenuOptions.contentViewOpacity) @@ -555,7 +556,7 @@ open class SlideMenuController: UIViewController, UIGestureRecognizerDelegate { addShadowToView(rightContainerView) - UIView.animate(withDuration: duration, delay: 0.0, options: UIViewAnimationOptions(), animations: { [weak self]() -> Void in + UIView.animate(withDuration: duration, delay: 0.0, options: SlideMenuOptions.animationOptions, animations: { [weak self]() -> Void in if let strongSelf = self { strongSelf.rightContainerView.frame = frame strongSelf.opacityView.layer.opacity = Float(SlideMenuOptions.contentViewOpacity) @@ -585,7 +586,7 @@ open class SlideMenuController: UIViewController, UIGestureRecognizerDelegate { duration = Double(fmax(0.1, fmin(1.0, duration))) } - UIView.animate(withDuration: duration, delay: 0.0, options: UIViewAnimationOptions(), animations: { [weak self]() -> Void in + UIView.animate(withDuration: duration, delay: 0.0, options: SlideMenuOptions.animationOptions, animations: { [weak self]() -> Void in if let strongSelf = self { strongSelf.leftContainerView.frame = frame strongSelf.opacityView.layer.opacity = 0.0 @@ -616,7 +617,7 @@ open class SlideMenuController: UIViewController, UIGestureRecognizerDelegate { duration = Double(fmax(0.1, fmin(1.0, duration))) } - UIView.animate(withDuration: duration, delay: 0.0, options: UIViewAnimationOptions(), animations: { [weak self]() -> Void in + UIView.animate(withDuration: duration, delay: 0.0, options: SlideMenuOptions.animationOptions, animations: { [weak self]() -> Void in if let strongSelf = self { strongSelf.rightContainerView.frame = frame strongSelf.opacityView.layer.opacity = 0.0 From d546c4a62bd00038fb4153b90f0566a93888083d Mon Sep 17 00:00:00 2001 From: "soojin.ro" Date: Fri, 17 Feb 2017 15:16:15 +0900 Subject: [PATCH 28/36] =?UTF-8?q?respect=20root=20view=20controller?= =?UTF-8?q?=E2=80=99s=20preferredStatusBarStyle?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Source/SlideMenuController.swift | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Source/SlideMenuController.swift b/Source/SlideMenuController.swift index edd56d4..467b1cc 100644 --- a/Source/SlideMenuController.swift +++ b/Source/SlideMenuController.swift @@ -212,6 +212,10 @@ open class SlideMenuController: UIViewController, UIGestureRecognizerDelegate { setUpViewController(rightContainerView, targetViewController: rightViewController) } + open override var preferredStatusBarStyle: UIStatusBarStyle { + return self.mainViewController?.preferredStatusBarStyle ?? .default + } + open override func openLeft() { guard let _ = leftViewController else { // If leftViewController is nil, then return return From 1e7f55e38d226af27ee803d09e5edbca996e4c42 Mon Sep 17 00:00:00 2001 From: Paolo Musolino Date: Mon, 27 Feb 2017 11:57:08 +0100 Subject: [PATCH 29/36] Added downloads badge in README, fix typos in other badges --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index a5959f8..b04e223 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,15 @@ SlideMenuControllerSwift ======================== -[![Platform](http://img.shields.io/badge/platform-ios-blue.svg?style=flat +[![Platform](http://img.shields.io/badge/platform-iOS-blue.svg?style=flat )](https://developer.apple.com/iphone/index.action) -[![Language](http://img.shields.io/badge/language-swift-brightgreen.svg?style=flat +[![Language](http://img.shields.io/badge/language-Swift-brightgreen.svg?style=flat )](https://developer.apple.com/swift) [![License](http://img.shields.io/badge/license-MIT-lightgrey.svg?style=flat )](http://mit-license.org) [![Issues](https://img.shields.io/github/issues/dekatotoro/SlideMenuControllerSwift.svg?style=flat )](https://github.com/dekatotoro/SlideMenuControllerSwift/issues?state=open) +[![Downloads](https://img.shields.io/cocoapods/dt/SlideMenuControllerSwift.svg)](https://cocoapods.org/pods/SlideMenuControllerSwift) From d64495159250a5c51f24ec90ea344b2d88242cc8 Mon Sep 17 00:00:00 2001 From: Maiko Hermans Date: Tue, 21 Mar 2017 11:52:14 +0100 Subject: [PATCH 30/36] Update README.md --- README.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index b04e223..0275678 100644 --- a/README.md +++ b/README.md @@ -17,14 +17,14 @@ iOS Slide View based on iQON, Feedly, Google+, Ameba iPhone app. ![sample](Screenshots/SlideMenuControllerSwift3.gif) -##Installation +## Installation -####CocoaPods +#### CocoaPods ``` pod 'SlideMenuControllerSwift' ``` -####Carthage +#### Carthage if iOS8 or later, Carthage is supported @@ -33,12 +33,12 @@ if iOS8 or later, Carthage is supported for more info, see [Carthage](https://github.com/carthage/carthage) -####Manually +#### Manually Add the `SlideMenuController.swift` file to your project. -##Usage +## Usage -###Setup +### Setup Add `import SlideMenuControllerSwift` in your file @@ -58,7 +58,7 @@ func application(application: UIApplication, didFinishLaunchingWithOptions launc } ``` -####Storyboard Support +#### Storyboard Support 1. Inherit `SlideMenuController` and put UIViewController in a storyboard. 2. Override `awakeFromNib`, then instantiate any view controllers @@ -88,7 +88,7 @@ SlideMenuOptions.contentViewScale = .50 ``` -###You can access from UIViewController +### You can access from UIViewController ```swift self.slideMenuController()? From 4f764dfe02b556a3f5d258d3dbf3ffff5b04c462 Mon Sep 17 00:00:00 2001 From: dekatotoro Date: Wed, 23 Aug 2017 17:00:04 +0900 Subject: [PATCH 31/36] Update podspec to 3.0.2 --- SlideMenuControllerSwift.podspec | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/SlideMenuControllerSwift.podspec b/SlideMenuControllerSwift.podspec index 76e760a..00e6e1f 100644 --- a/SlideMenuControllerSwift.podspec +++ b/SlideMenuControllerSwift.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = "SlideMenuControllerSwift" - s.version = "3.0.1" + s.version = "3.0.2" s.summary = "iOS Slide View based on iQON, Feedly, Google+, Ameba iPhone app." s.homepage = "https://github.com/dekatotoro/SlideMenuControllerSwift" s.license = { :type => "MIT", :file => "LICENSE" } @@ -12,4 +12,3 @@ Pod::Spec.new do |s| s.source_files = "Source/*.swift" s.requires_arc = true end - From 5ecf9c18befb1a24f700f0067645f77b3d90e63e Mon Sep 17 00:00:00 2001 From: dekatotoro Date: Wed, 23 Aug 2017 17:44:28 +0900 Subject: [PATCH 32/36] Update to Swift4 --- .swift-version | 2 +- .../project.pbxproj | 28 ++++++++++++++----- .../SlideMenuControllerSwift-iOS.xcscheme | 4 ++- .../SlideMenuControllerSwift.xcscheme | 4 ++- Source/SlideMenuController.swift | 17 ++++++----- 5 files changed, 36 insertions(+), 19 deletions(-) diff --git a/.swift-version b/.swift-version index 9f55b2c..5186d07 100644 --- a/.swift-version +++ b/.swift-version @@ -1 +1 @@ -3.0 +4.0 diff --git a/SlideMenuControllerSwift.xcodeproj/project.pbxproj b/SlideMenuControllerSwift.xcodeproj/project.pbxproj index 8bfa5f1..b7cc546 100644 --- a/SlideMenuControllerSwift.xcodeproj/project.pbxproj +++ b/SlideMenuControllerSwift.xcodeproj/project.pbxproj @@ -323,7 +323,7 @@ attributes = { LastSwiftMigration = 0700; LastSwiftUpdateCheck = 0700; - LastUpgradeCheck = 0800; + LastUpgradeCheck = 0900; ORGANIZATIONNAME = "Yuji Hato"; TargetAttributes = { 0E75C5951BE3CA7900844634 = { @@ -487,7 +487,7 @@ PRODUCT_BUNDLE_IDENTIFIER = dekatotoro.SlideMenuControllerSwift; PRODUCT_NAME = "$(PROJECT_NAME)"; SKIP_INSTALL = YES; - SWIFT_VERSION = 3.0; + SWIFT_VERSION = 4.0; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; @@ -512,7 +512,7 @@ PRODUCT_BUNDLE_IDENTIFIER = dekatotoro.SlideMenuControllerSwift; PRODUCT_NAME = "$(PROJECT_NAME)"; SKIP_INSTALL = YES; - SWIFT_VERSION = 3.0; + SWIFT_VERSION = 4.0; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; @@ -526,14 +526,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; @@ -561,7 +567,7 @@ ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 3.0; + SWIFT_VERSION = 4.0; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; @@ -574,14 +580,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; @@ -601,7 +613,7 @@ MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 3.0; + SWIFT_VERSION = 4.0; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; }; @@ -616,7 +628,7 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "dekatotoro.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 3.0; + SWIFT_VERSION = 4.0; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; @@ -631,7 +643,7 @@ ONLY_ACTIVE_ARCH = YES; PRODUCT_BUNDLE_IDENTIFIER = "dekatotoro.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 3.0; + SWIFT_VERSION = 4.0; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Release; @@ -649,6 +661,7 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "dekatotoro.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/SlideMenuControllerSwift.app/SlideMenuControllerSwift"; }; name = Debug; @@ -662,6 +675,7 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "dekatotoro.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/SlideMenuControllerSwift.app/SlideMenuControllerSwift"; }; name = Release; diff --git a/SlideMenuControllerSwift.xcodeproj/xcshareddata/xcschemes/SlideMenuControllerSwift-iOS.xcscheme b/SlideMenuControllerSwift.xcodeproj/xcshareddata/xcschemes/SlideMenuControllerSwift-iOS.xcscheme index 5237a5f..e2b0e67 100644 --- a/SlideMenuControllerSwift.xcodeproj/xcshareddata/xcschemes/SlideMenuControllerSwift-iOS.xcscheme +++ b/SlideMenuControllerSwift.xcodeproj/xcshareddata/xcschemes/SlideMenuControllerSwift-iOS.xcscheme @@ -1,6 +1,6 @@ @@ -36,6 +37,7 @@ buildConfiguration = "Debug" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + language = "" launchStyle = "0" useCustomWorkingDirectory = "NO" ignoresPersistentStateOnLaunch = "NO" diff --git a/SlideMenuControllerSwift.xcodeproj/xcuserdata/a12447.xcuserdatad/xcschemes/SlideMenuControllerSwift.xcscheme b/SlideMenuControllerSwift.xcodeproj/xcuserdata/a12447.xcuserdatad/xcschemes/SlideMenuControllerSwift.xcscheme index f5c7e95..2b3e0c2 100644 --- a/SlideMenuControllerSwift.xcodeproj/xcuserdata/a12447.xcuserdatad/xcschemes/SlideMenuControllerSwift.xcscheme +++ b/SlideMenuControllerSwift.xcodeproj/xcuserdata/a12447.xcuserdatad/xcschemes/SlideMenuControllerSwift.xcscheme @@ -1,6 +1,6 @@ SlideMenuController? { @@ -1052,26 +1051,26 @@ extension UIViewController { navigationItem.rightBarButtonItem = rightButton } - public func toggleLeft() { + @objc public func toggleLeft() { slideMenuController()?.toggleLeft() } - public func toggleRight() { + @objc public func toggleRight() { slideMenuController()?.toggleRight() } - public func openLeft() { + @objc public func openLeft() { slideMenuController()?.openLeft() } - public func openRight() { + @objc public func openRight() { slideMenuController()?.openRight() } - public func closeLeft() { + @objc public func closeLeft() { slideMenuController()?.closeLeft() } - public func closeRight() { + @objc public func closeRight() { slideMenuController()?.closeRight() } From 88ed3c28b17fdbb194dfa8b2c8e37c742c0b78a7 Mon Sep 17 00:00:00 2001 From: dekatotoro Date: Wed, 23 Aug 2017 17:44:36 +0900 Subject: [PATCH 33/36] Fix warning --- SlideMenuControllerSwift/AppDelegate.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SlideMenuControllerSwift/AppDelegate.swift b/SlideMenuControllerSwift/AppDelegate.swift index b808fbd..afe18f3 100644 --- a/SlideMenuControllerSwift/AppDelegate.swift +++ b/SlideMenuControllerSwift/AppDelegate.swift @@ -102,7 +102,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate { error = NSError(domain: "YOUR_ERROR_DOMAIN", code: 9999, userInfo: dict) // Replace this with code to handle the error appropriately. // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. - NSLog("Unresolved error \(error), \(error!.userInfo)") + NSLog("Unresolved error \(error?.debugDescription ?? ""), \(error?.userInfo.debugDescription ?? "")") abort() } catch { fatalError() @@ -134,7 +134,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate { error = error1 // Replace this implementation with code to handle the error appropriately. // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. - NSLog("Unresolved error \(error), \(error!.userInfo)") + NSLog("Unresolved error \(error?.debugDescription ?? ""), \(error?.userInfo.debugDescription ?? "")") abort() } } From 53579d409ddaa7d044b5da4a0f6ed7f0c423d7a5 Mon Sep 17 00:00:00 2001 From: dekatotoro Date: Tue, 31 Oct 2017 02:05:59 +0900 Subject: [PATCH 34/36] Update CHANGELOG --- CHANGELOG.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f2f0c81..0171050 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,23 @@ +4.0.0 Release notes (2017-10-31) +============================================================= + +### Enhancements +* Support Swift4.0 + +### Bugfixes +* None. + + +3.0.2 Release notes (2017-08-23) +============================================================= + +### Enhancements +* Added option `animationOptions`. + +### Bugfixes +* Respect root view controller’s preferredStatusBarStyle. + + 3.0.1 Release notes (2016-12-02) ============================================================= From 4228ef99a86fa75528fff5e67f756650ac031104 Mon Sep 17 00:00:00 2001 From: dekatotoro Date: Tue, 31 Oct 2017 02:06:07 +0900 Subject: [PATCH 35/36] Update README --- README.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 0275678..dad4d3f 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ iOS Slide View based on iQON, Feedly, Google+, Ameba iPhone app. ``` pod 'SlideMenuControllerSwift' ``` - + #### Carthage if iOS8 or later, Carthage is supported @@ -34,7 +34,7 @@ if iOS8 or later, Carthage is supported for more info, see [Carthage](https://github.com/carthage/carthage) #### Manually -Add the `SlideMenuController.swift` file to your project. +Add the `SlideMenuController.swift` file to your project. ## Usage @@ -49,7 +49,7 @@ In your app delegate: func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { // create viewController code... - + let slideMenuController = SlideMenuController(mainViewController: mainViewController, leftMenuViewController: leftViewController, rightMenuViewController: rightViewController) self.window?.rootViewController = slideMenuController self.window?.makeKeyAndVisible() @@ -85,7 +85,7 @@ If you want to use the custom option, please set them before calling the init me SlideMenuOptions.leftViewWidth = 50 SlideMenuOptions.contentViewScale = .50 ... - + ``` ### You can access from UIViewController @@ -99,7 +99,7 @@ if let slideMenuController = self.slideMenuController() { // some code } ``` -### add navigationBarButton +### add navigationBarButton ```swift viewController.addLeftBarButtonWithImage(UIImage(named: "hoge")!) viewController.addRightBarButtonWithImage(UIImage(named: "fuga")!) @@ -129,10 +129,10 @@ func rightDidClose() ``` ## Requirements -Requires Swift3.0 and iOS 8.0 and ARC. -If you are developing in the Swift1.1 ~ 2.3, please use branch of swift1.1 ~ 2.3. +Requires Swift4.0 and iOS 9.0 and ARC. +If you are developing in the Swift1.1 ~ 3.2, please use branch of swift1.1 ~ 3. If you want to use even iOS8.0, please to import the code directly. -If you want to use objective-c even iOS6.0, plesea use [SlideMenuControllerOC](https://github.com/Pluto-Y/SlideMenuControllerOC). +If you want to use objective-c even iOS6.0, plesea use [SlideMenuControllerOC](https://github.com/Pluto-Y/SlideMenuControllerOC). ## Features - Highly customizable @@ -144,7 +144,7 @@ Forks, patches and other feedback are welcome. ## Creator ### SlideMenuControllerSwift -[Yuji Hato](https://github.com/dekatotoro) +[Yuji Hato](https://github.com/dekatotoro) [Blog](http://buzzmemo.blogspot.jp/) ### SlideMenuControllerOC From f67bb237301564a2568f32d0b32d300f564f990a Mon Sep 17 00:00:00 2001 From: dekatotoro Date: Tue, 31 Oct 2017 02:06:15 +0900 Subject: [PATCH 36/36] Update podspec --- SlideMenuControllerSwift.podspec | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SlideMenuControllerSwift.podspec b/SlideMenuControllerSwift.podspec index 00e6e1f..4512a61 100644 --- a/SlideMenuControllerSwift.podspec +++ b/SlideMenuControllerSwift.podspec @@ -1,13 +1,13 @@ Pod::Spec.new do |s| s.name = "SlideMenuControllerSwift" - s.version = "3.0.2" + s.version = "4.0.0" s.summary = "iOS Slide View based on iQON, Feedly, Google+, Ameba iPhone app." s.homepage = "https://github.com/dekatotoro/SlideMenuControllerSwift" s.license = { :type => "MIT", :file => "LICENSE" } s.author = { "Yuji Hato" => "hatoyujidev@gmail.com" } s.social_media_url = "https://twitter.com/dekatotoro" s.platform = :ios - s.ios.deployment_target = "8.0" + s.ios.deployment_target = "9.0" s.source = { :git => "https://github.com/dekatotoro/SlideMenuControllerSwift.git", :tag => s.version } s.source_files = "Source/*.swift" s.requires_arc = true