PPRevealSideViewController 1.2.4

PPRevealSideViewController 1.2.4

测试已测试
语言语言 Objective-CObjective C
许可证 MIT
已发布最新发布2017年9月

Marian Paul 维护。



  • 作者
  • Marian PAUL

这是一个新的控制器容器,像 Facebook 或 Path 应用一样显示侧边视图。它使用起来与导航控制器一样简单。有时,您需要推入一个新的控制器来显示一些选项,但一个小的控制器就足够了……PPRevealSideViewController 就是您需要的控制器。

包括拖放和点击手势!

在 Youtube 上查看演示!

安装

安装 PPRevealSideViewController 的最简单方法是通过 CocoaPods 包管理器,因为它非常灵活,且提供轻松的安装方式。

旧方法

  1. 将 PPRevealSideViewController 添加为子模块到您的项目中
$ cd /path/to/MyApplication
# If this is a new project, initialize git...
$ git init
$ git submodule add git://github.com/ipup/PPRevealSideViewController.git vendor/PPRevealSideViewController
$ git submodule update --init --recursive
  1. 在您的 Xcode 项目中,从 PPRevealSideViewController 文件夹中获取 PPRevealSideViewController.h.m 文件,并将它们拖到您的项目中。
  2. PPRevealSideViewController.h 文件导入到您的 PCH 文件或 AppDelegate 文件中。
  3. 添加 QuartzCore 框架。
  4. 开始使用这个新控制器!

ARC 支持

PPRevealSideViewController 完全支持 ARC 和非 ARC 模式,无需配置。这对于您有旧项目或不想使用 ARC 的情况来说非常方便。ARC 支持已与 Apple LLVM 3.0 编译器进行了测试。

兼容性

这个类完全兼容 iOS 7。我最近停止支持之前的版本。所以如果需要,请获取比 这一版本更早的提交/版本。

状态保留和恢复

PPReveal 支持状态保留和恢复。您只需要设置所有希望恢复的控制器上的 restorationIdentifier,也许还有 restorationClass,然后您就设置好了。

状态栏样式 / 隐藏

状态栏样式和隐藏会被传递到子控制器。如果您想移除这个行为,只需从 PPReveal 派生一个子类并重写两者 childViewControllerForStatusBarStylechildViewControllerForStatusBarHidden 以返回 nil

文档

这个类已有文档说明。您可以浏览到文档/html文件夹,然后打开index.html(或者在网络上找到它:[http://ipup.github.com/PPRevealSideViewController](http://ipup.github.com/PPRevealSideViewController) 或者在 Xcode 中安装文档集合。

有两个示例代码

  • 第一个非常简单,在EasySample中打开即可
  • 第二个展示了所有配置方面:打开 PPRevealSideViewController.xcodeproj

两种方法:1. 前往 Xcode,偏好设置,下载,然后输入以下馈送网址:[http://ipup.github.com/PPRevealSideViewController/PPRevealSideViewController.atom](http://ipup.github.com/PPRevealSideViewController/PPRevealSideViewController.atom)

2. 按照以下步骤操作

  • 退出 Xcode
  • 转到 ~/Library/Developer/Shared/Documentation/DocSets,并复制 Documentation/PPRevealSideViewController.docset 文件。
  • 启动 Xcode,即可使用!

使用 BuildDocumentation 计划

如果您想创建文档,在运行此目标之前,您需要安装 AppleDoc:[https://github.com/tomaz/appledoc](https://github.com/tomaz/appledoc)

使用方法

创建您的控制器

在某个地方创建控制器,例如在您的应用程序代理中,动态分配并初始化控制器

_revealSideViewController = [[PPRevealSideViewController alloc] initWithRootViewController:rootController];

然后,将其添加到窗口中

self.window.rootViewController = _revealSideViewController;

或将它添加到一个视图中

[self.view addSubview:_revealSideViewController.view];

您可以在顶部添加一个导航控制器,例如

MainViewController *main = [[MainViewController alloc] initWithNibName:@"MainViewController" bundle:nil];
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:main];
_revealSideViewController = [[PPRevealSideViewController alloc] initWithRootViewController:nav];

self.window.rootViewController = _revealSideViewController;

推入控制器

您有多种推入控制器的方式(参见文档或示例),最简单的方式是

PopedViewController *c = [[PopedViewController alloc] initWithNibName:@"PopedViewController" bundle:nil ];
[self.revealSideViewController pushViewController:c onDirection:PPRevealSideDirectionBottom animated:YES];

这将在底部推入控制器,并使用默认偏移。您有四个方向

PPRevealSideDirectionBottom
PPRevealSideDirectionTop
PPRevealSideDirectionLeft
PPRevealSideDirectionRight

弹出

要从侧边控制器返回中心控制器,您可以弹出

[self.revealSideViewController popViewControllerAnimated:YES];

如果您想弹出新的中心控制器,请按照以下操作

MainViewController *c = [[MainViewController alloc] initWithNibName:@"MainViewController" bundle:nil];
UINavigationController *n = [[UINavigationController alloc] initWithRootViewController:c];
[self.revealSideViewController popViewControllerWithNewCenterController:n animated:YES];

注意,如果您没有所有侧面的控制器

如果您只想在左侧和右侧呈现控制器(例如),您可能不希望有弹动动画来显示尚未呈现控制器。这种动画出现在您进行一个在没有任何预加载数据的控制器上或尚未在该触发侧推入任何控制器的拖动手势时。在这种情况下,请按照以下操作

[self.revealSideViewController setDirectionsToShowBounce:PPRevealSideDirectionLeft | PPRevealSideDirectionRight];

您也可以完全禁用这些动画。按照如下操作禁用

[self.revealSideViewController setDirectionsToShowBounce:PPRevealSideDirectionNone];

从侧边推入

例如,如果您在顶部,并且希望向左侧推入一个控制器,您可能需要在您的中心控制器上调用一个方法请求它显示一个左侧控制器。但我认为提供一种直接推入旧控制器的路径会更方便。因此,使用以下方法将完成这项任务

[self.revealSideViewController pushOldViewControllerOnDirection:PPRevealSideDirectionLeft animated:YES];

如果您在顶部,并希望将新控制器推入顶部(为什么不呢),控制器默认行为是关闭顶部侧边,因为它已经打开。但您可以强制它弹出推入

[self.revealSideViewController pushViewController:c onDirection:PPRevealSideDirectionTop animated:YES forceToPopPush:YES];

完整打开

您可以完全打开一个侧面(以 Facebook 应用在您点击搜索栏时的例子)。当您在一个打开的侧面

[self.revealSideViewController openCompletelyAnimated:YES];

或者当你想从中心控制器打开(想想预先加载控制器)时

[self.revealSideViewController openCompletelySide:PPRevealSideDirectionLeft animated:YES];

完成API

调用 PPRevealSide 方法的每一次,如推送或弹出,都可以与完成块配合使用

 PopedViewController *c = [[PopedViewController alloc] initWithNibName:@"PopedViewController" bundle:nil ];
 [self.revealSideViewController pushViewController:c onDirection:PPRevealSideDirectionBottom withOffset:_offset animated:_animated completion:^{
     PPRSLog(@"This is the end!");
 }];

iOS 7 和状态栏

是的,这是 iOS 7 上的状态栏。好吧,你现在有两个选项(淡入设置为默认)。PPRevealSideOptionsiOS7StatusBarFadingPPRevealSideOptionsiOS7StatusBarMoving

试试它们!(使用 setOption:

请注意,如果您想在使用淡入选项时改变状态栏的背景颜色,请改变 fakeiOS7StatusBarColor 的值(默认为黑色)。

[self.revealSideViewController resetOption:PPRevealSideOptionsiOS7StatusBarFading];
[self.revealSideViewController setOption:PPRevealSideOptionsiOS7StatusBarMoving];

深入了解

默认情况下,边侧视图没有加载。这意味着即使你的界面有一个按钮用来推送一个侧视图,平移手势也不会显示出控制器。如果你想那样,你需要预先加载你想要展示的控制器。

TableViewController *c = [[TableViewController alloc] initWithStyle:UITableViewStylePlain];
[self.revealSideViewController preloadViewController:c
                                             forSide:PPRevealSideDirectionLeft
                                          withOffset:_offset];

请注意,当使用预先加载方法时,如果你从同一侧弹出中心控制器,可能会存在一些干扰……出于这个原因,我强烈建议你推迟预先加载方法。例如

- (void) viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(preloadLeft) object:nil];
    [self performSelector:@selector(preloadLeft) withObject:nil afterDelay:0.3];
}

如有需要,你还有一个卸载方法。当一个标签栏控制器作为你的边侧视图控制器的根时,这很有用。第一个项目可以有左侧,但第二个项目则不行!

- (void) unloadViewControllerForSide:(PPRevealSideDirection)direction;

如果你有一些已经配置了平移手势的视图,你有一些选择。记住,例如对于 UIWebView,最好的做法是将宽度适应屏幕,并禁用缩放。这通常是在一个移动感知网页上所做的。

  1. 禁用内容视图上的平移手势

    self.revealSideViewController.panInteractionsWhenClosed = PPRevealSideInteractionNavigationBar; self.revealSideViewController.panInteractionsWhenOpened = PPRevealSideInteractionNavigationBar;

  2. 实现代理方法

    • (PPRevealSideDirection)pprevealSideViewController:(PPRevealSideViewController *)controller directionsAllowedForPanningOnView:(UIView *)view {

      if ([view isKindOfClass:NSClassFromString(@"UIWebBrowserView")]) return PPRevealSideDirectionLeft | PPRevealSideDirectionRight;

      return PPRevealSideDirectionLeft | PPRevealSideDirectionRight | PPRevealSideDirectionTop | PPRevealSideDirectionBottom; }

  3. 在没有控制器的所有边上,你也可以禁用弹跳动画来显示没有控制器。

你现在有一个很好的方法可以替换中心控制器(感谢xOr-developer

SecondViewController *c = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
[self.revealSideViewController replaceCentralViewControllerWithNewController:c animated:YES animationDirection:PPRevealSideDirectionLeft completion:^{
    PPRSLog(@"Poped with new controller");
}];

选项

你在 PPRevealSideOptions 中可以找到以下一些可用的选项

  • PPRevealSideOptionsShowShadows:禁用或启用阴影。默认启用。
  • PPRevealSideOptionsBounceAnimations:决定动画是否为弹跳。默认是。
  • PPRevealSideOptionsCloseCompletlyBeforeOpeningNewDirection:决定是否在打开新方向之前完全关闭旧方向。默认设置为 YES。
  • PPRevealSideOptionsKeepOffsetOnRotation:旋转时保持相同的偏移。默认设置为 NO。
  • PPRevealSideOptionsResizeSideView:调整侧视图的大小。如果设置为 yes,这会禁用弹跳功能,因为背后的视图不够大,无法正确显示弹跳。默认设置为 NO。

你可以在

这个控制在这个我们的 iPuP 开发的应用中使用

Les Ardoises Preview

iAddict V3 Preview

JDGeek Preview

JDGamer Preview

请随意PR说明文档以添加您的应用!

其他贡献者

对于有完成块的方法 xOr-developer iOS 7中切换状态栏 cvknage

非常感谢他们!

许可

此代码由 Marian Paul 代表 iPuP SARL 根据 MIT 许可证发布。

当您在项目中使用此控制器时,请通知我!

祝好,
Marian Paul 亦称 ipodishima

http://www.ipup.pro