JVFloatingDrawer 0.1.0

JVFloatingDrawer 0.1.0

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布上次发布2015年1月

Julian Villella 维护。




  • 作者:
  • JVillella

JVFloatingDrawer 是一个浮动式抽屉导航。越来越多的应用正在利用抽屉模式。大多数应用看起来都很相似。使用 JVFloatingDrawer,我们致力于为常规设置带来新的外观。

Opening Drawer Animation

用法

JVFloatingDrawer 非常容易使用。下面是开始所需的一切。

JVFloatingDrawerViewController *drawerViewController = [[JVFloatingDrawerViewController alloc] init];

// Assign to your own view controllers
drawerViewController.leftViewController   = leftDrawerViewController;
drawerViewController.rightViewController  = rightDrawerViewController;
drawerViewController.centerViewController = centerViewController;

self.drawerViewController.backgroundImage = [UIImage imageNamed:@"background-image-example.jpg"];

drawerViewController.animator = [[JVFloatingDrawerSpringAnimator alloc] init];

要查看此实现的示例,请运行示例项目。克隆库,从 Example 目录中运行 pod install,并打开 Example/JVFloatingDrawer.xcworkspace

安装

工作原理

JVFloatingDrawer 被分割成几个可扩展的组件,它们之间相互通信。

JVFloatingDrawerViewController

JVFloatingDrawerViewController 保留了对中心、左侧和/或右侧 UIViewController 对象的引用。可以通过简单地将它重新分配给不同的视图控制器来替换 centerViewController。同样针对 leftViewControllerrightViewController

打开和关闭抽屉

JVFloatingDrawerViewController 是您打开、关闭和切换侧边抽屉的地方。

- (void)openDrawerWithSide:(JVFloatingDrawerSide)drawerSide animated:(BOOL)animated
                completion:(void(^)(BOOL finished))completion;

- (void)closeDrawerWithSide:(JVFloatingDrawerSide)drawerSide animated:(BOOL)animated
                 completion:(void(^)(BOOL finished))completion;

- (void)toggleDrawerWithSide:(JVFloatingDrawerSide)drawerSide animated:(BOOL)animated
                  completion:(void(^)(BOOL finished))completion;
抽屉宽度

您还可以通过设置这些属性来自定义 leftDrawerWidthrightDrawerWidth

背景图片

通过将 backgroundImage 属性赋值来设置背景图片。

动画器

动画器是 JVFloatingDrawer 的主要演员。《JVFloatingDrawer》自带一个预设的弹簧动画器,可以通过设置其 animationDurationanimationDelayspringDampinginitialSpringVelocity 进行自定义。在实例化一个新的动画器对象后,将其分配给 JVFloatingDrawerViewController 上的 animator 属性,以让它发挥作用。您可以通过实现 JVFloatingDrawerAnimation 协议来制作自己的动画器。稍后会更详细地介绍。

JVFloatingDrawerView

JVFloatingDrawerView 是一个内部类,用户不需要与之交互。它的任务是使用自动布局约束来布局侧滑抽屉。它处理了中心视图控制器周围的装饰项,如阴影和圆角。JVFloatingDrawerViewController 中的每个视图控制器(中心、左侧和右侧)都被封装在 UIView 容器中。这是我们支持抽屉交换的方式。

创建自己的动画器

JVFloatingDrawerSpringAnimator 类是您可以使用的特色动画器。如果您想创建自己的动画器,也很简单。所有动画器都遵守 JVFloatingDrawerAnimation 协议。 JVFloatingDrawerAnimation 有两个 必需 的方法 presentationdismissal

显示

- (void)presentationWithSide:(JVFloatingDrawerSide)drawerSide sideView:(UIView *)sideView centerView:(UIView *)centerView animated:(BOOL)animated completion:(void(^)(BOOL finished))completion

给定一个抽屉侧边、包含的侧视图和包含的中心视图,实现必须将侧视图显示在屏幕上。如果 drawerSide 等于 JVFloatingDrawerSideLeft,则视图将位于 centerView 的左侧。如果 drawerSide 等于 JVFloatingDrawerSideRight,则视图将位于 centerView 的右侧。您可以完全控制如何完成此操作。我在我的实现中使用视图转换,并调用了 UIView-animateWithDuration:delay:usingSpringWithDamping:...。从技术上讲,您甚至不需要使抽屉浮动。如果您喜欢,可以复制传统的抽屉滑动样式。最后,实现必须根据用户是否希望执行此动画来相应地作出反应,然后调用末尾的 completion 块。

消失

- (void)dismissWithSide:(JVFloatingDrawerSide)drawerSide sideView:(UIView *)sideView centerView:(UIView *)centerView animated:(BOOL)animated completion:(void(^)(BOOL finished))completion

消失与显示完全相同,除此之外,它需要能够获取打开的抽屉的当前位置并将它移出屏幕。同样,您如何实现这一点取决于您。

可选方法

- (void)willRotateOpenDrawerWithOpenSide:(JVFloatingDrawerSide)drawerSide sideView:(UIView *)sideView centerView:(UIView *)centerView

- (void)didRotateOpenDrawerWithOpenSide:(JVFloatingDrawerSide)drawerSide sideView:(UIView *)sideView centerView:(UIView *)centerView

-willRotateOpenDrawerWithOpenSide:sideView:centerView 在设备方向改变前立即调用,以便动画器可以处理它。 -didRotateOpenDrawerWithOpenSide:sideView:centerView 在之后立即调用。 JVFloatingDrawerSpringAnimator 仅实现了 -didRotateOpenDrawerWithOpenSide:sideView:centerView 并在其中调用了与 -presentationWithSide:sideView:centerView:animated:completion: 相同的代码。

作者

Julian Villella

许可证

JVFloatingDrawer 采用 MIT 许可证发布。有关更多信息,请参阅 LICENSE 文件。