Compare commits

..

19 Commits

Author SHA1 Message Date
jonkykong 202289d5c6 Updated README. 2018-09-25 02:58:18 -07:00
jonkykong f71245ed75 Update iOS minimum supported version and README. 2018-09-25 02:52:34 -07:00
jonkykong ba3703abda Updated podspec. 2018-09-25 02:44:40 -07:00
jonkykong 613fd9f68a Rest of previous commit. 2018-09-25 02:42:27 -07:00
jonkykong cb89d98dd8 Refactoring + Merge branch 'pr/399' into 5.0.0
* pr/399:
  feat: update swift version for all sub-projects (example,  pod, etc) to 4.2
  feat: update pod swift version to 4.2
  feat: update support for swift 4.2 (source and example)

# Conflicts:
#	Pod/Classes/SideMenuManager.swift
2018-09-25 02:39:36 -07:00
jonkykong 419eabb79d Merge branch 'pr/389' into 5.0.0
* pr/389:
  Parametrization of animation completion curve. Pod version 4.0.1

# Conflicts:
#	Pod/Classes/SideMenuManager.swift
2018-09-25 02:15:52 -07:00
jonkykong fee9c3cb20 Refactor. 2018-09-25 02:05:06 -07:00
Maxym Savisko cc436ded70 feat: update swift version for all sub-projects (example, pod, etc) to 4.2 2018-09-18 17:29:54 +03:00
Maxym Savisko aeaeba35ac feat: update pod swift version to 4.2 2018-09-18 17:20:32 +03:00
Maxym Savisko 51576e149d feat: update support for swift 4.2 (source and example) 2018-09-18 17:19:31 +03:00
AnatoliyPozdeyev 5f27a26c13 Parametrization of animation completion curve.
Pod version 4.0.1
2018-08-17 15:17:19 +03:00
Olcay Ertaş 0ff87874f6 Update SideMenuManager.swift
Static declarations are implicitly 'final'; use 'public' instead of 'open'
2018-08-14 10:31:27 +03:00
Jon Kent 83f8e461e1 Update README.md 2018-05-23 18:50:57 -07:00
jonkykong 40e8408ce1 Update README for Github. 2018-05-23 18:46:25 -07:00
jonkykong f66a3068b6 Merge tag '4.0.0'
* tag '4.0.0':
  Updated README and podspec.
  minor change to be compliant with swift 4.1
2018-05-23 18:45:48 -07:00
jonkykong 40ba7f335a Updated README and podspec. 2018-05-23 18:40:15 -07:00
jonkykong 32e6097602 Merge branch 'pr/345' into 4.0.0
* pr/345:
  minor change to be compliant with swift 4.1
2018-05-23 18:36:28 -07:00
jonkykong 2820b58e78 Merge tag '3.1.7'
* tag '3.1.7':
  Refactor.
  Refactor.
  Updated example storyboard.
  Upped minimum deployment target.
  Refactor.
  optimize check
  add nil check
  Fixed func hideMenuStart() to avoid problems when mainViewController is released at hideMenuComplete() func
2018-05-23 18:36:00 -07:00
Iosif Moldovan 965531907b minor change to be compliant with swift 4.1 2018-04-03 13:15:50 +03:00
11 changed files with 85 additions and 354 deletions
+2 -2
View File
@@ -42,7 +42,7 @@ class MainViewController: UIViewController {
let modes:[SideMenuManager.MenuPresentMode] = [.menuSlideIn, .viewSlideOut, .menuDissolveIn]
presentModeSegmentedControl.selectedSegmentIndex = modes.index(of: SideMenuManager.default.menuPresentMode)!
let styles:[UIBlurEffectStyle] = [.dark, .light, .extraLight]
let styles:[UIBlurEffect.Style] = [.dark, .light, .extraLight]
if let menuBlurEffectStyle = SideMenuManager.default.menuBlurEffectStyle {
blurSegmentControl.selectedSegmentIndex = styles.index(of: menuBlurEffectStyle) ?? 0
} else {
@@ -65,7 +65,7 @@ class MainViewController: UIViewController {
if segmentControl.selectedSegmentIndex == 0 {
SideMenuManager.default.menuBlurEffectStyle = nil
} else {
let styles:[UIBlurEffectStyle] = [.dark, .light, .extraLight]
let styles:[UIBlurEffect.Style] = [.dark, .light, .extraLight]
SideMenuManager.default.menuBlurEffectStyle = styles[segmentControl.selectedSegmentIndex - 1]
}
default: break;
+11 -293
View File
@@ -17,9 +17,9 @@
*/
@objcMembers
open class SideMenuManager : NSObject {
open class SideMenuManager: NSObject {
@objc public enum MenuPushStyle : Int {
@objc public enum MenuPushStyle: Int {
case defaultBehavior,
popWhenPossible,
replace,
@@ -28,7 +28,7 @@ open class SideMenuManager : NSObject {
subMenu
}
@objc public enum MenuPresentMode : Int {
@objc public enum MenuPresentMode: Int {
case menuSlideIn,
viewSlideOut,
viewSlideInOut,
@@ -112,7 +112,10 @@ open class SideMenuManager : NSObject {
open var menuFadeStatusBar = true
/// The animation options when a menu is displayed. Ignored when displayed with a gesture.
open var menuAnimationOptions: UIViewAnimationOptions = .curveEaseInOut
open var menuAnimationOptions: UIView.AnimationOptions = .curveEaseInOut
/// Animation curve of the remaining animation when the menu is partially dismissed with gestures. Default is .easeIn.
open var menuAnimationCompletionCurve: UIViewAnimationCurve = .easeIn
/// The animation spring damping when a menu is displayed. Ignored when displayed with a gesture.
open var menuAnimationUsingSpringWithDamping: CGFloat = 1
@@ -132,13 +135,11 @@ open class SideMenuManager : NSObject {
open var menuAlwaysAnimate = false
/// Default instance of SideMenuManager.
open static let `default` = SideMenuManager()
public static let `default` = SideMenuManager()
/// Default instance of SideMenuManager (objective-C).
open class var defaultManager: SideMenuManager {
get {
return SideMenuManager.default
}
return SideMenuManager.default
}
internal var transition: SideMenuTransition!
@@ -153,7 +154,7 @@ open class SideMenuManager : NSObject {
- Note: If you want cells in a UITableViewController menu to show vibrancy, make them a subclass of UITableViewVibrantCell.
*/
open var menuBlurEffectStyle: UIBlurEffectStyle? {
open var menuBlurEffectStyle: UIBlurEffect.Style? {
didSet {
if oldValue != menuBlurEffectStyle {
updateMenuBlurIfNecessary()
@@ -293,7 +294,7 @@ open class SideMenuManager : NSObject {
guard let forMenu = forMenu,
let menuBlurEffectStyle = menuBlurEffectStyle,
let view = forMenu.topViewController?.view,
!UIAccessibilityIsReduceTransparencyEnabled() else {
!UIAccessibility.isReduceTransparencyEnabled else {
return
}
@@ -399,286 +400,3 @@ open class SideMenuManager : NSObject {
return panGestureRecognizer
}
}
// Deprecations, to be removed at a future date.
extension SideMenuManager {
@available(*, deprecated, renamed: "default.menuPushStyle", message: "SideMenuManager class methods deprecated.")
open static var menuPushStyle: MenuPushStyle {
get {
return `default`.menuPushStyle
}
set {
`default`.menuPushStyle = newValue
}
}
@available(*, deprecated, renamed: "default.menuPresentMode", message: "SideMenuManager class methods deprecated.")
open static var menuPresentMode: MenuPresentMode {
get {
return `default`.menuPresentMode
}
set {
`default`.menuPresentMode = newValue
}
}
@available(*, deprecated, renamed: "default.menuAllowPushOfSameClassTwice", message: "SideMenuManager class methods deprecated.")
open static var menuAllowPushOfSameClassTwice: Bool {
get {
return `default`.menuAllowPushOfSameClassTwice
}
set {
`default`.menuAllowPushOfSameClassTwice = newValue
}
}
@available(*, deprecated, renamed: "default.menuWidth", message: "SideMenuManager class methods deprecated.")
open static var menuWidth: CGFloat {
get {
return `default`.menuWidth
}
set {
`default`.menuWidth = newValue
}
}
@available(*, deprecated, renamed: "default.menuAnimationPresentDuration", message: "SideMenuManager class methods deprecated.")
open static var menuAnimationPresentDuration: Double {
get {
return `default`.menuAnimationPresentDuration
}
set {
`default`.menuAnimationPresentDuration = newValue
}
}
@available(*, deprecated, renamed: "default.menuAnimationDismissDuration", message: "SideMenuManager class methods deprecated.")
open static var menuAnimationDismissDuration: Double {
get {
return `default`.menuAnimationDismissDuration
}
set {
`default`.menuAnimationDismissDuration = newValue
}
}
@available(*, deprecated, renamed: "default.menuAnimationCompleteGestureDuration", message: "SideMenuManager class methods deprecated.")
open static var menuAnimationCompleteGestureDuration: Double {
get {
return `default`.menuAnimationCompleteGestureDuration
}
set {
`default`.menuAnimationCompleteGestureDuration = newValue
}
}
@available(*, deprecated, renamed: "default.menuAnimationFadeStrength", message: "SideMenuManager class methods deprecated.")
open static var menuAnimationFadeStrength: CGFloat {
get {
return `default`.menuAnimationFadeStrength
}
set {
`default`.menuAnimationFadeStrength = newValue
}
}
@available(*, deprecated, renamed: "default.menuAnimationTransformScaleFactor", message: "SideMenuManager class methods deprecated.")
open static var menuAnimationTransformScaleFactor: CGFloat {
get {
return `default`.menuAnimationTransformScaleFactor
}
set {
`default`.menuAnimationTransformScaleFactor = newValue
}
}
@available(*, deprecated, renamed: "default.menuAnimationBackgroundColor", message: "SideMenuManager class methods deprecated.")
open static var menuAnimationBackgroundColor: UIColor? {
get {
return `default`.menuAnimationBackgroundColor
}
set {
`default`.menuAnimationBackgroundColor = newValue
}
}
@available(*, deprecated, renamed: "default.menuShadowOpacity", message: "SideMenuManager class methods deprecated.")
open static var menuShadowOpacity: Float {
get {
return `default`.menuShadowOpacity
}
set {
`default`.menuShadowOpacity = newValue
}
}
@available(*, deprecated, renamed: "default.menuShadowColor", message: "SideMenuManager class methods deprecated.")
open static var menuShadowColor: UIColor {
get {
return `default`.menuShadowColor
}
set {
`default`.menuShadowColor = newValue
}
}
@available(*, deprecated, renamed: "default.menuShadowRadius", message: "SideMenuManager class methods deprecated.")
open static var menuShadowRadius: CGFloat {
get {
return `default`.menuShadowRadius
}
set {
`default`.menuShadowRadius = newValue
}
}
@available(*, deprecated, renamed: "default.menuPresentingViewControllerUserInteractionEnabled", message: "SideMenuManager class methods deprecated.")
open static var menuPresentingViewControllerUserInteractionEnabled: Bool {
get {
return `default`.menuPresentingViewControllerUserInteractionEnabled
}
set {
`default`.menuPresentingViewControllerUserInteractionEnabled = newValue
}
}
@available(*, deprecated, renamed: "default.menuParallaxStrength", message: "SideMenuManager class methods deprecated.")
open static var menuParallaxStrength: Int {
get {
return `default`.menuParallaxStrength
}
set {
`default`.menuParallaxStrength = newValue
}
}
@available(*, deprecated, renamed: "default.menuFadeStatusBar", message: "SideMenuManager class methods deprecated.")
open static var menuFadeStatusBar: Bool {
get {
return `default`.menuFadeStatusBar
}
set {
`default`.menuFadeStatusBar = newValue
}
}
@available(*, deprecated, renamed: "default.menuAnimationOptions", message: "SideMenuManager class methods deprecated.")
open static var menuAnimationOptions: UIViewAnimationOptions {
get {
return `default`.menuAnimationOptions
}
set {
`default`.menuAnimationOptions = newValue
}
}
@available(*, deprecated, renamed: "default.menuAnimationUsingSpringWithDamping", message: "SideMenuManager class methods deprecated.")
open static var menuAnimationUsingSpringWithDamping: CGFloat {
get {
return `default`.menuAnimationUsingSpringWithDamping
}
set {
`default`.menuAnimationUsingSpringWithDamping = newValue
}
}
@available(*, deprecated, renamed: "default.menuAnimationInitialSpringVelocity", message: "SideMenuManager class methods deprecated.")
open static var menuAnimationInitialSpringVelocity: CGFloat {
get {
return `default`.menuAnimationInitialSpringVelocity
}
set {
`default`.menuAnimationInitialSpringVelocity = newValue
}
}
@available(*, deprecated, renamed: "default.menuDismissOnPush", message: "SideMenuManager class methods deprecated.")
open static var menuDismissOnPush: Bool {
get {
return `default`.menuDismissOnPush
}
set {
`default`.menuDismissOnPush = newValue
}
}
/// -Warning: Deprecated. Use `menuPushStyle = .subMenu` instead.
@available(*, deprecated, renamed: "menuPushStyle", message: "Use `menuPushStyle = .subMenu` instead.")
open static var menuAllowSubmenus: Bool {
get {
return menuPushStyle == .subMenu
}
set {
if newValue {
menuPushStyle = .subMenu
}
}
}
/// -Warning: Deprecated. Use `menuPushStyle = .popWhenPossible` instead.
@available(*, deprecated, renamed: "menuPushStyle", message: "Use `menuPushStyle = .popWhenPossible` instead.")
open static var menuAllowPopIfPossible: Bool {
get {
return menuPushStyle == .popWhenPossible
}
set {
if newValue {
menuPushStyle = .popWhenPossible
}
}
}
/// -Warning: Deprecated. Use `menuPushStyle = .replace` instead.
@available(*, deprecated, renamed: "menuPushStyle", message: "Use `menuPushStyle = .replace` instead.")
open static var menuReplaceOnPush: Bool {
get {
return menuPushStyle == .replace
}
set {
if newValue {
menuPushStyle = .replace
}
}
}
@available(*, deprecated, renamed: "default.menuBlurEffectStyle", message: "SideMenuManager class methods deprecated.")
open static var menuBlurEffectStyle: UIBlurEffectStyle? {
get {
return `default`.menuBlurEffectStyle
}
set {
`default`.menuBlurEffectStyle = newValue
}
}
@available(*, deprecated, renamed: "default.menuLeftNavigationController", message: "SideMenuManager class methods deprecated.")
open static var menuLeftNavigationController: UISideMenuNavigationController? {
get {
return `default`.menuLeftNavigationController
}
set {
`default`.menuLeftNavigationController = newValue
}
}
@available(*, deprecated, renamed: "default.menuRightNavigationController", message: "SideMenuManager class methods deprecated.")
open static var menuRightNavigationController: UISideMenuNavigationController? {
get {
return `default`.menuRightNavigationController
}
set {
`default`.menuRightNavigationController = newValue
}
}
@available(*, deprecated, renamed: "default.menuLeftSwipeToDismissGesture", message: "SideMenuManager class methods deprecated.")
open static weak var menuLeftSwipeToDismissGesture: UIPanGestureRecognizer? {
get {
return `default`.menuLeftSwipeToDismissGesture
}
set {
`default`.menuLeftSwipeToDismissGesture = newValue
}
}
@available(*, deprecated, renamed: "default.menuRightSwipeToDismissGesture", message: "SideMenuManager class methods deprecated.")
open static weak var menuRightSwipeToDismissGesture: UIPanGestureRecognizer? {
get {
return `default`.menuRightSwipeToDismissGesture
}
set {
`default`.menuRightSwipeToDismissGesture = newValue
}
}
@available(*, deprecated, renamed: "default.menuEnableSwipeGestures", message: "SideMenuManager class methods deprecated.")
open static var menuEnableSwipeGestures: Bool {
get {
return `default`.menuEnableSwipeGestures
}
set {
`default`.menuEnableSwipeGestures = newValue
}
}
@available(*, deprecated, renamed: "default.menuAddScreenEdgePanGesturesToPresent", message: "SideMenuManager class methods deprecated.")
@discardableResult open class func menuAddScreenEdgePanGesturesToPresent(toView: UIView, forMenu:UIRectEdge? = nil) -> [UIScreenEdgePanGestureRecognizer] {
return `default`.menuAddScreenEdgePanGesturesToPresent(toView: toView, forMenu: forMenu)
}
@available(*, deprecated, renamed: "default.menuAddPanGestureToPresent", message: "SideMenuManager class methods deprecated.")
@discardableResult open class func menuAddPanGestureToPresent(toView: UIView) -> UIPanGestureRecognizer {
return `default`.menuAddPanGestureToPresent(toView: toView)
}
}
+12 -16
View File
@@ -22,20 +22,16 @@ open class SideMenuTransition: UIPercentDrivenInteractiveTransition {
}
}
fileprivate var menuWidth: CGFloat {
get {
let overriddenWidth = menuViewController?.menuWidth ?? 0
if overriddenWidth > CGFloat.ulpOfOne {
return overriddenWidth
}
return sideMenuManager.menuWidth
let overriddenWidth = menuViewController?.menuWidth ?? 0
if overriddenWidth > CGFloat.ulpOfOne {
return overriddenWidth
}
return sideMenuManager.menuWidth
}
internal weak var sideMenuManager: SideMenuManager!
internal weak var mainViewController: UIViewController?
internal weak var menuViewController: UISideMenuNavigationController? {
get {
return presentDirection == .left ? sideMenuManager.menuLeftNavigationController : sideMenuManager.menuRightNavigationController
}
return presentDirection == .left ? sideMenuManager.menuLeftNavigationController : sideMenuManager.menuRightNavigationController
}
internal var presentDirection: UIRectEdge = .left
internal weak var tapView: UIView? {
@@ -67,8 +63,8 @@ open class SideMenuTransition: UIPercentDrivenInteractiveTransition {
required public init(sideMenuManager: SideMenuManager) {
super.init()
NotificationCenter.default.addObserver(self, selector:#selector(handleNotification), name: NSNotification.Name.UIApplicationDidEnterBackground, object: nil)
NotificationCenter.default.addObserver(self, selector:#selector(handleNotification), name: NSNotification.Name.UIApplicationWillChangeStatusBarFrame, object: nil)
NotificationCenter.default.addObserver(self, selector:#selector(handleNotification), name: .UIApplicationDidEnterBackground, object: nil)
NotificationCenter.default.addObserver(self, selector:#selector(handleNotification), name: .UIApplicationWillChangeStatusBarFrame, object: nil)
self.sideMenuManager = sideMenuManager
}
@@ -77,9 +73,7 @@ open class SideMenuTransition: UIPercentDrivenInteractiveTransition {
}
fileprivate static var visibleViewController: UIViewController? {
get {
return getVisibleViewController(forViewController: UIApplication.shared.keyWindow?.rootViewController)
}
return getVisibleViewController(forViewController: UIApplication.shared.keyWindow?.rootViewController)
}
fileprivate class func getVisibleViewController(forViewController: UIViewController?) -> UIViewController? {
@@ -373,7 +367,7 @@ open class SideMenuTransition: UIPercentDrivenInteractiveTransition {
originalSuperview.addSubview(mainViewController.view)
}
if notification.name == NSNotification.Name.UIApplicationDidEnterBackground {
if notification.name == .UIApplicationDidEnterBackground {
hideMenuStart().hideMenuComplete()
menuViewController?.dismiss(animated: false, completion: nil)
return
@@ -398,7 +392,9 @@ extension SideMenuTransition: UIViewControllerAnimatedTransitioning {
// animate a change from one viewcontroller to another
open func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
completionCurve = sideMenuManager.menuAnimationCompletionCurve
// get reference to our fromView, toView and the container view that we should perform the transition in
let container = transitionContext.containerView
// prevent any other menu gestures from firing
@@ -19,13 +19,11 @@ open class UISideMenuNavigationController: UINavigationController {
fileprivate weak var foundDelegate: UISideMenuNavigationControllerDelegate?
fileprivate weak var activeDelegate: UISideMenuNavigationControllerDelegate? {
get {
guard !view.isHidden else {
return nil
}
return sideMenuDelegate ?? foundDelegate ?? findDelegate(forViewController: presentingViewController)
guard !view.isHidden else {
return nil
}
return sideMenuDelegate ?? foundDelegate ?? findDelegate(forViewController: presentingViewController)
}
fileprivate func findDelegate(forViewController: UIViewController?) -> UISideMenuNavigationControllerDelegate? {
if let navigationController = forViewController as? UINavigationController {
@@ -45,9 +43,7 @@ open class UISideMenuNavigationController: UINavigationController {
internal var locked = false
internal var originalMenuBackgroundColor: UIColor?
internal var transition: SideMenuTransition {
get {
return sideMenuManager.transition
}
return sideMenuManager.transition
}
/// Delegate for receiving appear and disappear related events. If `nil` the visible view controller that displays a `UISideMenuNavigationController` automatically receives these events.
@@ -85,9 +81,7 @@ open class UISideMenuNavigationController: UINavigationController {
/// Indicates if the menu is anywhere in the view hierarchy, even if covered by another view controller.
open var isHidden: Bool {
get {
return self.presentingViewController == nil
}
return presentingViewController == nil
}
#if !STFU_SIDEMENU
@@ -239,11 +233,11 @@ open class UISideMenuNavigationController: UINavigationController {
return
}
NotificationCenter.default.removeObserver(self.transition, name: NSNotification.Name.UIApplicationWillChangeStatusBarFrame, object: nil)
NotificationCenter.default.removeObserver(self.transition, name: .UIApplicationWillChangeStatusBarFrame, object: nil)
coordinator.animate(alongsideTransition: { (context) in
self.transition.presentMenuStart()
}) { (context) in
NotificationCenter.default.addObserver(self.transition, selector:#selector(SideMenuTransition.handleNotification), name: NSNotification.Name.UIApplicationWillChangeStatusBarFrame, object: nil)
NotificationCenter.default.addObserver(self.transition, selector:#selector(SideMenuTransition.handleNotification), name: .UIApplicationWillChangeStatusBarFrame, object: nil)
}
}
+3 -3
View File
@@ -13,14 +13,14 @@ open class UITableViewVibrantCell: UITableViewCell {
fileprivate var vibrancyView:UIVisualEffectView = UIVisualEffectView()
fileprivate var vibrancySelectedBackgroundView:UIVisualEffectView = UIVisualEffectView()
fileprivate var defaultSelectedBackgroundView:UIView?
open var blurEffectStyle: UIBlurEffectStyle? {
open var blurEffectStyle: UIBlurEffect.Style? {
didSet {
updateBlur()
}
}
// For registering with UITableView without subclassing otherwise dequeuing instance of the cell causes an exception
public override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
public override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
}
@@ -45,7 +45,7 @@ open class UITableViewVibrantCell: UITableViewCell {
// shouldn't be needed but backgroundColor is set to white on iPad:
backgroundColor = UIColor.clear
if let blurEffectStyle = blurEffectStyle, !UIAccessibilityIsReduceTransparencyEnabled() {
if let blurEffectStyle = blurEffectStyle, !UIAccessibility.isReduceTransparencyEnabled {
let blurEffect = UIBlurEffect(style: blurEffectStyle)
vibrancyView.effect = UIVibrancyEffect(blurEffect: blurEffect)
+5 -1
View File
@@ -328,7 +328,7 @@
isa = PBXProject;
attributes = {
LastSwiftUpdateCheck = 0730;
LastUpgradeCheck = 0900;
LastUpgradeCheck = 0930;
};
buildConfigurationList = 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */;
compatibilityVersion = "Xcode 3.2";
@@ -409,12 +409,14 @@
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES;
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_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
@@ -496,12 +498,14 @@
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES;
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_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+19 -12
View File
@@ -7,13 +7,13 @@
[![Monthly Downloads](https://img.shields.io/cocoapods/dm/SideMenu.svg?style=social)](http://cocoapods.org/pods/SideMenu)
[![Weekly Downloads](https://img.shields.io/cocoapods/dw/SideMenu.svg?style=social)](http://cocoapods.org/pods/SideMenu)
### If you like SideMenu, give it a ★ at the top right of this page.
### If you like SideMenu, give it a ★ at the top right of its [GitHub](https://github.com/jonkykong/SideMenu) page.
#### Using SideMenu in your app? [Send](mailto:yo@massappeal.co?subject=SideMenu%20in%20action!) me a link to your app in the app store!
> Hi, I'm Jon Kent and I am an iOS designer, developer, and mobile strategist. I love coffee and play the drums.
> * [**Hire me**](mailto:yo@massappeal.co?subject=Let's%20build%20something%20amazing) to help you make cool stuff. *Note: If you're having a problem with SideMenu, please open an [issue](https://github.com/jonkykong/SideMenu/issues/new) and do not email me.*
> * Check out my [website](http://massappeal.co) to see some of my other projects.
> * Building and maintaining this **free** library takes a lot of my time and **saves you time**. Please consider paying it forward by supporting me with a small amount to my [PayPal](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=contact%40jonkent%2eme&lc=US&currency_code=USD&bn=PP%2dDonationsBF%3abtn_donateCC_LG%2egif%3aNonHosted). (only **2** people have donated since inception 😕 but **thank you** to those who have!)
> * Building and maintaining this **free** library takes a lot of my time and **saves you time**. Please consider paying it forward by supporting me with a small amount to my [PayPal](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=contact%40jonkent%2eme&lc=US&currency_code=USD&bn=PP%2dDonationsBF%3abtn_donateCC_LG%2egif%3aNonHosted). (only **4** people have donated since inception 😕 but **thank you** to those who have!)
* **[Overview](#overview)**
* [Preview Samples](#preview-samples)
@@ -36,14 +36,14 @@
## Overview
SideMenu is a simple and versatile side menu control written in Swift.
* **It can be implemented in storyboard without a single line of [code](#code-less-storyboard-implementation).**
* Four standard animation styles to choose from (there's even a parallax effect if you want to get weird).
* Highly customizable without needing to write tons of custom code.
* Supports continuous swiping between side menus on boths sides in a single gesture.
* Global menu configuration. Set-up once and be done for all screens.
* Menus can be presented and dismissed the same as any other view controller since this control uses [custom transitions](https://developer.apple.com/library/content/featuredarticles/ViewControllerPGforiPhoneOS/CustomizingtheTransitionAnimations.html).
* Animations use your view controllers, not snapshots.
* Properly handles screen rotation and in-call status bar height changes.
- [x] **It can be implemented in storyboard without a single line of [code](#code-less-storyboard-implementation).**
- [x] Four standard animation styles to choose from (there's even a parallax effect if you want to get weird).
- [x] Highly customizable without needing to write tons of custom code.
- [x] Supports continuous swiping between side menus on boths sides in a single gesture.
- [x] Global menu configuration. Set-up once and be done for all screens.
- [x] Menus can be presented and dismissed the same as any other view controller since this control uses [custom transitions](https://developer.apple.com/library/content/featuredarticles/ViewControllerPGforiPhoneOS/CustomizingtheTransitionAnimations.html).
- [x] Animations use your view controllers, not snapshots.
- [x] Properly handles screen rotation and in-call status bar height changes.
Check out the example project to see it in action!
### Preview Samples
@@ -52,8 +52,9 @@ Check out the example project to see it in action!
| ![](https://raw.githubusercontent.com/jonkykong/SideMenu/master/etc/SlideOut.gif) | ![](https://raw.githubusercontent.com/jonkykong/SideMenu/master/etc/SlideIn.gif) | ![](https://raw.githubusercontent.com/jonkykong/SideMenu/master/etc/Dissolve.gif) | ![](https://raw.githubusercontent.com/jonkykong/SideMenu/master/etc/InOut.gif) |
## Requirements
* Xcode 9.
* iOS 8 or higher.
- [x] Xcode 10.
- [x] Swift 4.2.
- [x] iOS 10 or higher.
## Installation
### CocoaPods
@@ -73,6 +74,9 @@ use_frameworks!
pod 'SideMenu'
# For Swift 4 (no longer maintained), use:
# pod 'SideMenu', '~> 4.0.0'
# For Swift 3 (no longer maintained), use:
# pod 'SideMenu', '~> 2.3.4'
```
@@ -232,6 +236,9 @@ open var menuFadeStatusBar = true
/// The animation options when a menu is displayed. Ignored when displayed with a gesture.
open var menuAnimationOptions: UIViewAnimationOptions = .curveEaseInOut
/// Animation curve of the remaining animation when the menu is partially dismissed with gestures. Default is .easeIn.
open var menuAnimationCompletionCurve: UIViewAnimationCurve = .easeIn
/// The animation spring damping when a menu is displayed. Ignored when displayed with a gesture.
open var menuAnimationUsingSpringWithDamping: CGFloat = 1
+1 -1
View File
@@ -8,7 +8,7 @@
Pod::Spec.new do |s|
s.name = "SideMenu"
s.version = "3.1.5"
s.version = "5.0.0"
s.summary = "Simple side menu control for iOS in Swift inspired by Facebook. Right and Left sides. No coding required."
# This description is used to generate tags and improve search results.
+15 -9
View File
@@ -279,7 +279,7 @@
isa = PBXProject;
attributes = {
LastSwiftUpdateCheck = 0800;
LastUpgradeCheck = 0900;
LastUpgradeCheck = 0930;
ORGANIZATIONNAME = jonkykong;
TargetAttributes = {
7B48A0D21DCB2487002990A1 = {
@@ -495,7 +495,7 @@
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = com.jonkykong.Example;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 4.0;
SWIFT_VERSION = 4.2;
};
name = Debug;
};
@@ -509,7 +509,7 @@
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = com.jonkykong.Example;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 4.0;
SWIFT_VERSION = 4.2;
};
name = Release;
};
@@ -523,7 +523,7 @@
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = com.jonkykong.ExampleTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 4.0;
SWIFT_VERSION = 4.2;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Example.app/Example";
};
name = Debug;
@@ -538,7 +538,7 @@
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = com.jonkykong.ExampleTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 4.0;
SWIFT_VERSION = 4.2;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Example.app/Example";
};
name = Release;
@@ -556,6 +556,7 @@
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
@@ -563,6 +564,7 @@
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
@@ -591,12 +593,13 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 4.2;
TARGETED_DEVICE_FAMILY = "1,2";
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
@@ -616,6 +619,7 @@
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
@@ -623,6 +627,7 @@
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
@@ -645,10 +650,11 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
SWIFT_VERSION = 4.2;
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
VERSIONING_SYSTEM = "apple-generic";
@@ -674,7 +680,7 @@
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 4.0;
SWIFT_VERSION = 4.2;
};
name = Debug;
};
@@ -695,7 +701,7 @@
PRODUCT_BUNDLE_IDENTIFIER = com.jonkykong.SideMenu;
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
SWIFT_VERSION = 4.0;
SWIFT_VERSION = 4.2;
};
name = Release;
};
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0900"
LastUpgradeVersion = "0930"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
@@ -26,7 +26,6 @@
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
language = ""
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
@@ -37,7 +36,6 @@
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
language = ""
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IDEDidComputeMac32BitWarning</key>
<true/>
</dict>
</plist>