只是一个容器控制器,通过触摸/滑动手势以优雅而独特的方式呈现其他控制器!看看使用它的应用程序的例子
要运行示例项目,请克隆仓库,然后首先从 Examples 目录运行 pod install
。始终通过 .xcworkspace
文件打开项目。
LESliderController
只有在项目在执行期间不允许更改方向的情况下才能良好工作。只有在固定在竖向 OR 横向的应用程序中。将 LESliderController 文件夹中的所有文件拖动并复制到您的项目,或者将其添加为 git 子模块。
LESliderController
的使用非常简单直观。按照以下步骤进行
1) 将您想要作为导航根/容器的控制器编写成 LESliderMainViewController
的子类
@import UIKit;
#import <LESliderController/LESliderMainViewController.h>
@interface MyViewController : LESliderMainViewController
@end
2) 添加按钮以触发到“子”控制器的转换。这可以通过 Interface Builder 或使用代码分配的按钮完成。您甚至可以使用任何类型的 UIViews
,只要您使用某种手势识别器触发转换即可。让我们用一个 interface builder 例子继续
@property (weak, nonatomic) IBOutlet UIButton *rightButton;
@property (weak, nonatomic) IBOutlet UIButton *leftButton;
3) 如果您正在使用 storyboad,请在 interface builder 的第三个标签(identity inspector)中为每个您想要通过主视图呈现的“子”设置一个 Storyboard ID
。
4) 现在,在实际的控制器实现 (.m) 文件中,设置您想要的每个“子”控制器,如下例所示
- (void)viewDidLoad
{
[super viewDidLoad];
UIViewController *rightViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"RightViewController"];
[self registerTriggerView:self.rightButton toViewController:rightViewController onSide:LESliderSideRight];
[self addSliderGesture:LESliderSideRight toTriggerView:self.rightButton];
UIViewController *leftViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"LeftViewController"];
[self registerTriggerView:self.leftButton toViewController:leftViewController onSide:LESliderSideLeft];
[self addSliderGesture:LESliderSideLeft toTriggerView:self.leftButton];
}
注意 onSide:
参数。您可以选择 LESliderSideRight
从右向左转换,或者选择 LESliderSideLeft
从左向右转换。
使用此代码片段后,您就可以使用您注册的按钮上的滑动手势呈现控制器了。
5) 实现按钮(或不是使用按钮的情况下使用触摸手势识别器)的动作,以便在触摸时触发过渡。
- (IBAction)leftButtonDidTouch:(id)sender {
[self showRegisteredViewControllerForTriggerView:sender animated:YES completion:nil];
}
- (IBAction)rightButtonDidTouch:(id)sender {
[self showRegisteredViewControllerForTriggerView:sender animated:YES completion:nil];
}
6) 最后,在控制器中导入 #import <LESliderController/UIViewController+LESliderChild.h>
文件头,并在任何按钮的动作中调用以下方法以关闭控制器。
#import "UIViewController+LESliderChild.h"
@implementation MyChildViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
}
- (IBAction)didTouchBackBtn:(id)sender {
[self dismissSliderController:YES];
}
@end
检查 LESliderMainViewController.h
以查看所有可用属性。您可以使用它们,例如,更改动画的持续时间。
特别要讨论的是缓存的呈现控制器。基本设置保留对控制器的引用,与 UITabBarController 类似。这意味着,一旦呈现控制器,关闭它,然后再呈现,之前的州将被保留。这可以非常有用,可以避免多次请求数据加载,但可能会导致问题,如果控制器较重且消耗大量内存。
如果是这种情况,您想 avoiding this behaviour,可以在关闭后释放控制器以下设置。
在您的 LESliderMainViewController.h
子类中
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
self.cacheControllers = NO;
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (IBAction)rightButtonDidTouch:(id)sender {
UIViewController *rightViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"RightViewController"];
[self registerTriggerView:self.rightButton toViewController:rightViewController onSide:LESliderSideRight];
[self showRegisteredViewControllerForTriggerView:sender animated:YES completion:nil];
}
- (IBAction)leftButtonDidTouch:(id)sender {
UIViewController *leftViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"LeftViewController"];
[self registerTriggerView:self.leftButton toViewController:leftViewController onSide:LESliderSideLeft];
[self showRegisteredViewControllerForTriggerView:sender animated:YES completion:nil];
}
LESliderMainViewController.m
文件以允许在执行期间更改方向。喜欢这个项目吗?有什么缺失或可以改进的地方?请随意贡献:)
分叉它
创建您的分支 git checkout -b name-your-feature
提交它 git commit -m '差异'
推送它 git push origin name-your-feature
创建一个拉取请求
卢卡斯·埃德华多,[email protected]
LESliderController 在 MIT 许可证下可用。有关更多信息,请参阅许可证文件。