MMDrawerController(0.6.0) 文档翻译(简介,非API文档)

来源:互联网 发布:应用数据可以删吗 编辑:程序博客网 时间:2024/05/22 17:12

Mutual Mobile Drawer Controller

随着使用抽屉效果的应用越来越多,MMDrawerController应运而生。MMDrawerController是一个仅支持侧边抽屉导航的轻量级库。同时库中还提供了定制展现、收缩抽屉导航栏动画的方法。

Documentation
官方的文档在CocoaDocs中可以找到。

Installing MMDrawerController
你可以使用CocoaPods在你的项目中安装MMDrawerController。

pod 'MMDrawerController', '~> 0.5.7'

Creating a Drawer Controller
创建一个MMDrawerController和创建一个中央视图控制器与抽屉视图控制器一样简单,然后再初始化抽屉。

UIViewController * leftDrawer = [[UIViewController alloc] init];UIViewController * center = [[UIViewController alloc] init];UIViewController * rightDrawer = [[UIViewController alloc] init];MMDrawerController * drawerController = [[MMDrawerController alloc]                                       initWithCenterViewController:center                                           leftDrawerViewController:leftDrawer                                           rightDrawerViewController:rightDrawer];

Features
UINavigationController Support
MMDrawerController可以无缝接受一个UINavigationController作为中心视图控制器(centerViewController),并且自动更新所支持的手势。总的来说,使用下面描述的分类,任何包含在UINavigationController中的子视图控制器可以访问父视图控制器。(我觉得翻译的有瑕疵,贴出原文: In addition, any child view controller contained within the UINavigationController will have access to the parent drawer controller using the category explained below.)

UIGestureRecongnizer Support
MMDrawerController通过两个掩码(一个用于打开,一个用于关闭)支持手势开关抽屉,选项如下:

  • MMOpenDrawerGestureMode
    • MMOpenDrawerGestureModePanningNavigationBar:用户可以通过拖拽导航条的任何地方来打开抽屉视图
    • MMOpenDrawerGestureModePanningCenterView:用户可以通过拖拽中央视图的任何地方来打开抽屉视图
    • MMOpenDrawerGestureModeBezelPanningCenterView:用户可以通过在任意地方开始,离边缘20个点位内拖拽来打开抽屉视图(原文:The user can open the drawer by starting a pan anywhere within 20 points of the bezel)
    • MMOpenDrawerGestureModeCustom:开发者可以提供一个回调函数(block)来决定手势是否可以被识别。更多信息请接着看。
  • MMCloseDrawerGestureMode
    • MMCloseDrawerGestureModePanningNavigationBar:用户可以通过拖拽导航条的任意地方来关闭抽屉视图
    • MMCloseDrawerGestureModePanningCenterView:用户可以通过拖拽中心视图的任意地方来关闭抽屉视图
    • MMCloseDrawerGestureModeBezelPanningCenterView:用户可以从中央视图的任意地方开始,在边缘之内拖拽来关闭抽屉视图(原文:The user can close the drawer by starting a pan anywhere within the bezel of the center view)
    • MMCloseDrawerGestureModeTapNavigationBar:用户可以通过点击导航条来关闭抽屉视图
    • MMCloseDrawerGesturePanningDrawerView:用户可以拖拽抽屉视图任意位置来关闭它
    • MMCloseDrawerGestureModeCustom:开发者可以提供一个回调函数(block)来决定是否接收手势。更多信息请接着看。

你可以自由的设置任何打开关闭抽屉视图的组合。不过请注意这些手势可能与发送到子视图控制器的点击冲突,所以请在你的应用中适当的使用手势。例如,如果一个MKMapView是你的中央视图,你可能不希望设置MMOpenDrawerGestureModePanningCenterView,因为那可能让MKMapView拦截这个拖拽,并以为那是在移动地图。

Custom Gesture Recognizer Support
从0.3.0版本开始,你可以使用setGestureShouldRecognizeTouchBlock:方法并提供一个回调函数(block)来决定一个手势是否可以被识别。这个方法提供了三个参数-抽屉视图,手势和点击(the drawer controller, the gesture, and the touch)。作为开发者,你有责任检验这三个参数,并且决定一个手势是否应该被识别。注意,如果你在相应的掩码中设置了MMOpenDrawerGestureModeCustom / MMCloseDrawerGestureModeCustom,回调函数(block)才会有效(原文:Note the block is only consulted if you have set MMOpenDrawerGestureModeCustom/MMCloseDrawerGestureModeCustom on the appropriate mask)。
比如,假设你的中心视图控制器包含一些元素,你只希望当拖拽手势的初始点击处在一个子视图中。你应该确保openDrawerGestureModeMask包含了MMOpenDrawerGestureModeCustom,并且你可以写如下的回调函数(block):

[myDrawerController setGestureShouldRecognizeTouchBlock:^BOOL(MMDrawerController *drawerController, UIGestureRecognizer *gesture, UITouch *touch) {     BOOL shouldRecognizeTouch = NO;     if(drawerController.openSide == MMDrawerSideNone &&        [gesture isKindOfClass:[UIPanGestureRecognizer class]]){         UIView * customView = [drawerController.centerViewController myCustomSubview];         CGPoint location = [touch locationInView:customView];         shouldRecognizeTouch = (CGRectContainsPoint(customView.bounds, location));     }     return shouldRecognizeTouch; }];

注意,你应该不会想让openDrawerGestureModeMask包含MMOpenDrawerGestureModePanningCenterView,因为那样会产生自动无视手势在中心视图中的起始点的效果(原文:since that would take over and be applied automatically regardless of where the touch begins within the center view)。

Custom Drawer Open/Close Animations
当抽屉视图打开或关闭效果被拖拽手势触发时,MMDrawerController提供了一个回调函数供开发者实现自己的动画效果。在回调函数(block)中,你有责任更新抽屉视图的视觉状态,同时,抽屉视图将会处理那个状态的动画。
比如,要在动画过程中设置抽屉视图侧边栏的alpha值时,你可以按照下面的实现方式:

[drawerController     setDrawerVisualStateBlock:^(MMDrawerController *drawerController, MMDrawerSide drawerSide, CGFloat percentVisible) {         UIViewController * sideDrawerViewController;         if(drawerSide == MMDrawerSideLeft){             sideDrawerViewController = drawerController.leftDrawerViewController;         }         else if(drawerSide == MMDrawerSideRight){             sideDrawerViewController = drawerController.rightDrawerViewController;         }         [sideDrawerViewController.view setAlpha:percentVisible];     }];

总的来说,MMDrawerController提供了一些过渡动画。这些动画被包含在MMDrawerController项目中的子项目里,详情请看文档(原文:In addition, MMDrawerController ships with several prebuilt animations to let you go crazy right out of the box. These are included as a subspec for the project, and more information can be found below)。

Center View COntroller Interaction Mode
当抽屉视图被打开时,你可以控制用户和中心视图控制器的交互方式。

  • MMDrawerOpenCenterInteractionModeNone:用户不能与中心视图的任何内容有交互。
  • MMDrawerOpenCenterInteractionModeFull:用户可以与中心视图的任何内容有交互。
  • MMDrawerOpenCenterInteractionModeNavigationBarOnly:用户只能与导航条中的内容交互。这个设置允许菜单按钮被响应,允许你在抽屉视图打开的时候让它关闭。上述都是默认设置。

Accessing the Drawer Controller from a Child View Controller
你可以使用UIViewController+MMDrawerController分类在子视图控制器中直接访问drawerController。

State Restoration
从0.4.0版本开始,MMDrawerController支持iOS状态恢复。为了让MMDrawerController使用state restoration选项,你必须为你的抽屉视图设置restorationIdentifier。如果你需要让MMDrawerController管理的三个视图都有恢复功能,你的centerViewController,leftDrawerViewController和rightDrawerViewController的实例必须设置它们自己的restorationIdentifier(创建一个restorationClass也是可以的)。如果你的应用被放在后台运行时MMDrawerController有一个打开的抽屉视图,那么程序切换到前台运行时这个状态也必须被恢复。

iOS 7 Status Bar Support
Child View Controller Support
从iOS7开始,默认情况下子视图控制器将决定status bar的状态,包括status bar的风格及它是否被隐藏。这些值将会在抽屉侧边栏状态改变时被更新,这意味着侧边抽屉视图会提供一个与中心视图不同的状态值。

如果你不希望抽屉视图会影响子视图控制器的这些状态,你应该继承MMDrawerController,覆盖childViewControllerForStatusBarStyle和childViewControllerForStatusBarHidden,并让它们都返回nil。

Custom Status Bar Background View
如果你的中心视图控制器和抽屉控制器颜色差异较大,iOS7的status bar的处理方式会让你的应用看起来跟想象的差距较大。从iOS7开始,MMDrawerController支持在屏幕顶部绘制定制的状态栏。为了提供给你一个能展示颜色差异大的状态栏,并且能在状态栏下面能显示你自定义的内容,请在iOS6.x以下版本使用上述设计。
为了使用自定义的status bar,设置showStatusBarBackgroundView为YES即可。默认情况下,这个设置会在status bar下面绘制一个黑色的view,并把你的内容调整的比status bar低一点点。如果你想用自定义的status background color,你可以设置statusBarViewBackgroundColor为任何你想要的颜色。

Subcalssing
如果你计划继承MMDrawerController,在你的继承类中导入MMDrawerController+Sbuclass.h文件,这样你就可以使用MMDrawerController0保护的方法。注意,少部分的方法会假设或者要求你调用super的方法,所以请注意调用super方法。
如果现有方法不足以实现你的需求,请打开Github的issue,告诉我们你的需求,我们会尽力相助。

MMDrawerBarButtonItem
我们用代码绘制了一个标准菜单按钮,你可以在任何UINavigationBar中使用,你也可以为它设置任何你想要的颜色。MMDrawerBarButtonItem包含在这个项目的subspec中,请尽情使用。
从iOS7开始,抽屉按钮被绘制的更细了。总的来说,设置颜色的方法不同了,颜色主要被tintColor决定。同时请注意,阴影也会随系统主题而不同。

Prebuilt Example Animations
为了你能更方便的使用MMDrawerController,我们提供了常用的动画效果。你只需要导入MMDrawerVisualStates子项目,便可以使用我们提供的视觉效果。
比如你需要使用滑动和缩放动画,你可以这样:

[drawerController setDrawerVisualStateBlock:[MMDrawerVisualState slideAndScaleVisualStateBlock]];

下面是我们的动画列表:

  • Slide:抽屉与中心视图滑动的速率相同。
  • Slide and Scale:抽屉在滑动的同时会进行缩放,并且alpha(透明度)值也会从0.0增长到1.0。
  • Swinging Door:抽屉会在中心视图和边缘之间晃动(字面意思看感觉像是果冻效果,原文:The drawer swings in along a hinge on the center view controller)。
  • Parallax:抽屉会以一个比中心视图频率低的频率晃动,并有一个视差效果(原文:The drawer slides in at a slower rate than the center view controller, giving a parallax effect)。

Stretchy(弹性) Drawer
默认情况下,当你把侧边抽屉拖到比它宽度还宽的位置时松手,会有一个果冻效果让侧边抽屉恢复到设置的宽度。你可以设置shouldStrethDrawer为NO来关闭这个效果,或者你也可以自定义在percentVisible大于1.0时的动画(原文:or you can make your own overshoot animation by creating a custom visual state block and setting up custom transforms for when percentVisible is greater than 1.0)。

Bounce Preview
为了使你的抽屉侧栏更容易被发现,你可以在应用首次加载时晃动一下抽屉侧栏。你可以用bouncePreviewForDrawerSide:completion: 方法来实现这个效果。
如果你需要自定义抽屉侧栏晃动的距离,你可以使用bouncePreviewForDrawerSide:distance:completion:方法。

0 0
原创粉丝点击