这是一个 iOS objective-c 库模板,用于模拟新 Facebook 应用和 Path 应用的侧边栏布局。
JTRevealSidebarV2 旨在成为一个真正灵活和可重用的解决方案,它已经被精心实现。
它是在 iOS 4.3 和 5.0 设备下开发的,样例代码使用 ARC 编写,但该库本身应与 ARC 和非 ARC 兼容。
在 JTRevealSidebarV2 中,所有侧边栏都应被视为导航项,每个侧边栏都应能够通过当前视图控制器直接配置。
它设计用于与 UINavigationController 一起使用,但从技术上讲,它应在其他 UIViewControllers 子类上也能工作。
将 JTRevealSidebarV2/ 中的所有头文件和实现文件包含到您的项目中。
@interface ViewController () <JTRevealSidebarV2Delegate>
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
self.navigationItem.revealSidebarDelegate = self;
}
/*
:
:
*/
#pragma mark JTRevealSidebarDelegate
// This is an examle to configure your sidebar view through a custom UIViewController
- (UIView *)viewForLeftSidebar {
// Use applicationViewFrame to get the correctly calculated view's frame
// for use as a reference to our sidebar's view
CGRect viewFrame = self.navigationController.applicationViewFrame;
UITableViewController *controller = self.leftSidebarViewController;
if ( ! controller) {
self.leftSidebarViewController = [[SidebarViewController alloc] init];
self.leftSidebarViewController.sidebarDelegate = self;
controller = self.leftSidebarViewController;
controller.title = @"LeftSidebarViewController";
}
controller.view.frame = CGRectMake(0, viewFrame.origin.y, 270, viewFrame.size.height);
controller.view.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleHeight;
return controller.view;
}
// This is an examle to configure your sidebar view without a UIViewController
- (UIView *)viewForRightSidebar {
// Use applicationViewFrame to get the correctly calculated view's frame
// for use as a reference to our sidebar's view
CGRect viewFrame = self.navigationController.applicationViewFrame;
UITableView *view = self.rightSidebarView;
if ( ! view) {
view = self.rightSidebarView = [[UITableView alloc] initWithFrame:CGRectZero];
view.dataSource = self;
view.delegate = self;
}
view.frame = CGRectMake(self.navigationController.view.frame.size.width - 270, viewFrame.origin.y, 270, viewFrame.size.height);
view.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleHeight;
return view;
}
// Optional delegate methods for additional configuration after reveal state changed
- (void)didChangeRevealedStateForViewController:(UIViewController *)viewController {
// Example to disable userInteraction on content view while sidebar is revealing
if (viewController.revealedState == JTRevealedStateNo) {
self.view.userInteractionEnabled = YES;
} else {
self.view.userInteractionEnabled = NO;
}
}
@implementation ViewController
/*
:
:
*/
#pragma mark Action
- (void)revealLeftSidebar:(id)sender {
[self.navigationController toggleRevealState:JTRevealedStateLeft];
}
- (void)revealRightSidebar:(id)sender {
[self.navigationController toggleRevealState:JTRevealedStateRight];
}
@end
方向改变不是官方完成的功能,主要需要修复的是旋转动画和在 AppDelegate 中创建的容器的必要性。如果您有任何优雅的解决方案,请告诉我,并向我发送拉取请求!
请转到 JTRevealSidebarV2/ViewController.h 并将 EXPERIEMENTAL_ORIENTATION_SUPPORT 更改为 1 以进行测试。
2012年3月29日更新:添加了切换显示状态的方法,还添加了示例以在侧边栏显示时禁用用户交互
2012年1月31日更新
改进了方向支持,动画更出色,现在您需要将 <QuartzCore/QuartzCore.h> 添加到您的项目中。
2012年2月1日更新:固定了当在横屏模式下首次显示侧边栏视图时的错误起始位置(实验性)。方向支持应该准备好了!
请注意检查JTRevealSidebarDemoV2/ViewController.m中的示例代码,欢迎提供反馈和拉取请求。谢谢!
James