iOS-Slide-Menu 1.5

iOS-Slide-Menu 1.5

测试已测试
语言语言 Obj-CObjective C
许可 MIT
发布最新版本2016年11月

Aryan Ghassemi维护。



  • Aryan Ghassemi

注意:如果您的应用程序同时支持横屏和竖屏,并且支持iOS 8以下的版本,则请使用版本1.4.5。

iOS Slide Menu在UINavigationController之上构建,具有可配置的按钮、揭示动画和点击/滑动手势识别器。

alt tag

版本1.4.5说明

启用shouldRecognizeSimultaneouslyWithGestureRecognizer可能引起问题,如果您遇到意外的手势行为,请删除pod并重新安装,因为该方法已被删除。

版本1.4.0说明

switchToViewController:withCompletion: 方法已被弃用。为了获得相同的行为,请使用 popToRootAndSwitchToViewController:withCompletion

新功能

  • 允许限制平移手势仅限于视图的两侧
  • 允许开启/关闭阴影
  • 允许在切换viewControllers时开启/关闭滑动动画
  • 微小的错误修正

版本1.3.0说明

如果您是从以前的版本更新,您将遇到编译错误,因为这些是由于RevealAnimations的改变。动画配置现在是不同的处理方式,并且与SlideNavigationController分开。请参见以下内容以获取更多信息。

设置

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    LeftMenuViewController *leftMenu = [[LeftMenuViewController alloc] init];
        RightMenuViewController *rightMenu = [[RightMenuViewController alloc] init];

    [SlideNavigationController sharedInstance].rightMenu = rightMenu;
    [SlideNavigationController sharedInstance].leftMenu = leftMenu;

    // Override point for customization after application launch.
    return YES;
}

为不同的ViewControllers配置左右菜单

您可以通过实现SlideNavigationControllerDelegate的以下委托方法来决定是否在每个viewController中启用或禁用滑动功能。这些方法是可选的,如果不实现,则为特定的viewController禁用菜单功能。

@interface MyViewController : UIViewController <SlideNavigationControllerDelegate>
@end
@implementation MyViewController

- (BOOL)slideNavigationControllerShouldDisplayLeftMenu
{
        return YES;
}

- (BOOL)slideNavigationControllerShouldDisplayRightMenu
{
    return YES;
}

@end

公共属性

avoidSwitchingToSameClassViewController

默认值设置为YES。如果设置为YES,则在切换到新的viewController时,如果新的viewController与当前viewController的类型相同,则会关闭菜单而不是切换到viewController。

如果设置为NO,则无论类型如何都会切换到viewController。

这在您有一个菜单项,并且当用户选择已选中的菜单项时,您不想导航到viewController的新实例时非常有用。

启用滑动手势

设置为“是”时,用户可以通过滑动来打开菜单

设置为“否”时,滑动将不可用,用户只能通过添加到navigationBar的UIBarButtonItem来打开菜单

panGestureSideOffset

此属性允许您限制手势操作到视图的边缘。例如,将此值设置为50意味着触摸被限制在视图右侧和左侧各50像素内。如果有在UITableView上实现滑动删除功能的需求,这可能会很有用。

panGestureSideOffset的默认值设置为0。将panGestureSideOffset设置为0表示如果启用滑动手势为true,则在整个视图中检测触摸。

enableShadow

一个布尔值,允许您打开或关闭阴影。默认情况下阴影设置为true

rightMenu

navigationController中右侧菜单的viewController

leftMenu

navigationController中左侧菜单的viewController

leftBarButtonItem

默认值为null。当此按钮被设置时,navigationController使用该UIBarButtonItem作为左边的项。此属性是用于需要自定义UIBarButtonItem时的情况(使用自定义视图初始化UIBarButtonItem)

rightBarButtonItem

行为完全相同于leftBarButtonItem,但用作菜单的右按钮

portraitSlideOffset

portraitSlideOffset的默认值为60。这意味着在竖屏模式下打开菜单时,可见部分的navigationController的宽度为60像素

landscapeSlideOffset

landscapeSlideOffset的默认值为60。这意味着在横屏模式下打开菜单时,可见部分的navigationController的宽度为60像素

menuRevealAnimationDuration

动画持续时间的默认值为.3,此属性允许配置动画持续时间

menuRevealAnimationOption

默认为UIViewAnimationOptionCurveEaseOut,您可以将此属性更改为配置动画选项

menuRevealAnimator

menuRevealAnimator用于在显示时对左右菜单进行动画。默认值为nil,这意味着打开/关闭菜单时不会发生任何动画。

存在一些可用的动画类可用。这些动画类可以通过初始化方法选项进行配置。

  • SlideNavigationContorllerAnimatorSlide
  • SlideNavigationContorllerAnimatorFade
  • SlideNavigationContorllerAnimatorScale
  • SlideNavigationContorllerAnimatorScaleAndFade
  • SlideNavigationContorllerAnimatorSlideAndFade
SlideNavigationContorllerAnimatorSlideAndFade *alideAndFadeAnimator = [[SlideNavigationContorllerAnimatorSlideAndFade alloc] initWithMaximumFadeAlpha:.8 fadeColor:[UIColor redColor] andSlideMovement:100];
[SlideNavigationController sharedInstance].menuRevealAnimator = alideAndFadeAnimator;

公共方法

+ (SlideNavigationController *)sharedInstance;

返回SlideNavigationController的单例实例

- (void)switchToViewController:(UIViewController *)viewController withCompletion:(void (^)())completion;

此方法已被弃用

- (void)popToRootAndSwitchToViewController:(UIViewController *)viewController withCompletion:(void (^)())completion;

弹出到根视图控制器并调用完成

- (void)popToRootAndSwitchToViewController:(UIViewController *)viewController withSlideOutAnimation:(BOOL)slideOutAnimation andCompletion:(void (^)())completion;

类似于前一个方法,但在切换时可以开启/关闭滑出动画

- (void)popAllAndSwitchToViewController:(UIViewController *)viewController withCompletion:(void (^)())completion;

用包含新 ViewController 的新栈替换 ViewController 栈,并调用完成

- (void)popAllAndSwitchToViewController:(UIViewController *)viewController withSlideOutAnimation:(BOOL)slideOutAnimation andCompletion:(void (^)())completion;

类似于前一个方法,但在切换时可以开启/关闭滑出动画

- (void)openMenu:(Menu)menu withCompletion:(void (^)(void))completion;

打开指定的菜单并在动画完成后调用完成块

- (void)closeMenuWithCompletion:(void (^)(void))completion;

关闭菜单并在动画完成后调用完成块

- (void)toggleLeftMenu;

根据现有状态切换菜单的打开或关闭。这样做是为了将选择器传递给自定义 UIBarButtonItem(例如,具有自定义视图的 UIBarButtonItem)

UIButton *button  = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 30, 30)];
[button setImage:[UIImage imageNamed:@"menu-button"] forState:UIControlStateNormal];
[button addTarget:[SlideNavigationController sharedInstance] action:@selector(toggleRightMenu) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:button];
[SlideNavigationController sharedInstance].rightBarButtonItem = rightBarButtonItem;
- (void)bounceMenu:(Menu)menu withCompletion:(void (^)(void))completion;

反弹右或左菜单,并在动画完成后调用完成块

- (void)toggleRightMenu;

与 toggleLeftMenu 工作完全相同,但用于切换左菜单

- (BOOL)isMenuOpen;

返回一个布尔值,表示菜单是打开还是关闭

定制动画

SlideNavigationController 允许自定义揭示动画。要添加自定义动画,请创建一个新类,实现 SlideNavigationContorllerAnimator 协议。有关更多信息,请参阅现有动画类。

- (void)prepareMenuForAnimation:(Menu)menu;

此方法在菜单即将揭示之前被调用

- (void)animateMenu:(Menu)menu withProgress:(CGFloat)progress;

此方法在菜单揭示时被调用,并传递用于动画的进度(进度在 0 和 1 之间)

- (void)clear;

此方法在动画实例需要更改时被调用,例如从SlideNavigationContorllerAnimatorFade更改为SlideNavigationContorllerAnimatorSlide。在此方法中,如果需要,应清除菜单的状态。例如,如果您为了显示动画而向菜单中添加了一个视图,那么在clear被调用时应将其移除。公共方法

通知

SlideNavigationControllerDidOpen

每次菜单完全打开时都会发布此通知。Userinfo包含一个键为"menu"的值,可能有两个值:"left"和"right"。

SlideNavigationControllerDidClose

每次菜单完全关闭时都会发布此通知。Userinfo包含一个键为"menu"的值,可能有两个值:"left"和"right"。

SlideNavigationControllerDidReveal

每次菜单显示时都会发布此通知。Userinfo包含一个键为"menu"的值,可能有两个值:"left"和"right"。