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

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包含了


Paste_Image.png

注意,你应该不会想让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值时,你可以按照下面的实现方式:

Paste_Image.png

总的来说,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:方法

其他参考资料(Demo):
1.MMDrawerController搭配storyboard使用详解

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,440评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,814评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,427评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,710评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,625评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,014评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,511评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,162评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,311评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,262评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,278评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,989评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,583评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,664评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,904评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,274评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,856评论 2 339

推荐阅读更多精彩内容