-
ViewController.m
#import "ViewController.h"
#import "QCMainViewController.h"
#import "QCDrawerViewController.h"
// 设定抽屉视图的宽度
#define DRAWER_VC_WIDTH ((self.view.bounds.size.width * 3) / 4)
@interface ViewController ()
@property (nonatomic, strong) QCMainViewController *mainVC;
@property (nonatomic, strong) UINavigationController *mainNVC;
@property (nonatomic, strong) QCDrawerViewController *drawerVC;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// 添加主视图
self.mainVC = [[QCMainViewController alloc] init];
self.mainNVC = [[UINavigationController alloc] initWithRootViewController:self.mainVC];
[self addChildViewController:self.mainNVC];
[self.view addSubview:self.mainNVC.view];
// 添加抽屉视图
self.drawerVC = [[QCDrawerViewController alloc] init];
self.drawerVC.view.frame = CGRectMake(-DRAWER_VC_WIDTH, 0, DRAWER_VC_WIDTH, self.view.bounds.size.height);
[self addChildViewController:self.drawerVC];
[self.view addSubview:self.drawerVC.view];
// 抽屉视图显示/隐藏回调
__weak typeof(self) weakSelf = self;
self.mainVC.myBlock = ^(BOOL isPush){
CGRect mainNVCFrame = weakSelf.self.mainNVC.view.bounds;
CGRect drawerVCFrame = weakSelf.self.drawerVC.view.bounds;
mainNVCFrame.origin.x = isPush ? DRAWER_VC_WIDTH : 0;
drawerVCFrame.origin.x = isPush ? 0 : -DRAWER_VC_WIDTH;
[UIView animateWithDuration:0.5 animations:^{
weakSelf.mainNVC.view.frame = mainNVCFrame;
weakSelf.drawerVC.view.frame = drawerVCFrame;
}];
};
}
@end
-
QCMainViewController.h
#import <UIKit/UIKit.h>
@interface QCMainViewController : UIViewController
@property (nonatomic, copy) void (^myBlock)(BOOL);
@end
-
QCMainViewController.m
#import "QCMainViewController.h"
@interface QCMainViewController ()
@property (nonatomic, assign, getter = isPush) BOOL push;
@end
@implementation QCMainViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor yellowColor];
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"抽屉" style:UIBarButtonItemStylePlain target:self action:@selector(pushDrawer)];
// 功能测试
for (NSUInteger i = 0; i < 5; i++) {
UIButton *btn = [[UIButton alloc] init];
[self.view addSubview:btn];
btn.frame = CGRectMake(20, 200 + i * 60, 100, 50);
btn.tag = i +1;
[btn setTitle:[NSString stringWithFormat:@"按钮 %li", i + 1] forState:UIControlStateNormal];
[btn setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
[btn addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];
}
}
// 功能测试
- (void)btnClick:(UIButton *)btn {
NSLog(@"按钮 %li", btn.tag);
}
// 抽屉视图显示/隐藏
- (void)pushDrawer {
self.push = !self.isPush;
if (self.myBlock != nil) {
self.myBlock(self.isPush);
}
}
// 触摸手势抽屉视图显示/隐藏
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
if (self.isPush) {
[self pushDrawer];
}
}
@end
-
QCDrawerViewController.m
#import "QCDrawerViewController.h"
@interface QCDrawerViewController ()
@end
@implementation QCDrawerViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor blueColor];
// 功能测试
for (NSUInteger i = 0; i < 5; i++) {
UIButton *btn = [[UIButton alloc] init];
[self.view addSubview:btn];
btn.frame = CGRectMake(20, 200 + i * 60, 100, 50);
btn.tag = i +1;
[btn setTitle:[NSString stringWithFormat:@"功能 %li", i + 1] forState:UIControlStateNormal];
[btn addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];
}
}
// 功能测试
- (void)btnClick:(UIButton *)btn {
NSLog(@"功能 %li", btn.tag);
}
@end
-
效果
![drawer1]()
![drawer2]()