效果图:(菜单,出现菜单栏-_-就放了个button,再次点击菜单回来,点击橘色的button推送到一个新的界面)
思路:给UIViewController添加标签控制器,标签控制器上装两个导航控制器,点击导航控制器上左边的UIabrButtonItem改变标签控制器视图的坐标(大小),再次点击还原
(附加:点击橘色按钮,push一个页面,页面充满整个屏幕)
给UIView添加子视图控制器:
@interface ViewController () {
UINavigationController *homenav; //导航控制器
UINavigationController *messagenav; //导航控制器
UITabBarController *redViewController;//标签控制器
CGPoint _point; //屏幕中心点坐标
}
- (void)viewDidLoad {
[super viewDidLoad];
[self menuView];
_point = self.view.center;
redViewController = [[UITabBarController alloc]init];
redViewController.view.backgroundColor = [UIColor redColor];
//更改所有导航控制器颜色
[UINavigationBar appearance].barTintColor = [UIColor greenColor];
homenav = [[UINavigationController alloc]initWithRootViewController:[[HomeViewController alloc]init]];
messagenav = [[UINavigationController alloc]initWithRootViewController:[[MessageViewController alloc]init]];
homenav.navigationBar.translucent = NO;
redViewController.view.layer.shadowOffset = CGSizeMake(-10, 0);
redViewController.view.layer.shadowColor = [UIColor blackColor].CGColor;
//默认不显示阴影,要改不透明度
redViewController.view.layer.shadowOpacity = 0.6;
redViewController.viewControllers = @[homenav,messagenav];
//添加子视图控制器
[self addChildViewController:redViewController];
//视图添加到自己的视图上面
[self.view addSubview:redViewController.view];
}
#pragma mark - 菜单
- (void)menuView {
UIView *meanuView = [[UIView alloc]initWithFrame:self.view.bounds];
meanuView.backgroundColor = [UIColor yellowColor];
[self.view addSubview:meanuView];
UIButton *button = [[UIButton alloc]init];
button.frame = CGRectMake(0,100, 100, 30);
button.backgroundColor = [UIColor orangeColor];
[button addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];
[meanuView addSubview:button];
}
- (void)buttonPressed:(UIButton *)sender {
sharedInfoCenter.showLeftMenuView = NO;
[UIView animateWithDuration:0.2 animations:^{
redViewController.view.center = _point;
redViewController.view.transform = CGAffineTransformIdentity;
}];
NSLog(@"%@",redViewController.selectedViewController);
UIViewController *detailViewController = [[UIViewController alloc]init];
detailViewController.title = redViewController.selectedViewController.title;
detailViewController.view.backgroundColor = [UIColor whiteColor];
if ([redViewController.selectedViewController isKindOfClass:[UINavigationController class]]) {
[((UINavigationController *)redViewController.selectedViewController) pushViewController:detailViewController animated:YES];
}
}
baseViewController:
- (void)viewDidLoad {
[super viewDidLoad];
//自定义视图
// UIBarButtonItem *leftItem = [UIBarButtonItem alloc]initWithCustomView:<#(UIView *)#>
_point = self.view.center;
UIBarButtonItem *leftItem = [[UIBarButtonItem alloc]initWithTitle:@"菜单" style:UIBarButtonItemStylePlain target:self action:@selector(barButtonItem:)];
self.navigationItem.leftBarButtonItem = leftItem;
}
- (void)barButtonItem:(UIBarButtonItem *)sender {
//单例持有
sharedInfoCenter.showLeftMenuView = !sharedInfoCenter.showLeftMenuView;
if (sharedInfoCenter.showLeftMenuView) {
[UIView animateWithDuration:0.2 animations:^{
self.tabBarController.view.transform = CGAffineTransformMakeScale(0.8, 0.8);
self.tabBarController.view.center = CGPointMake(_point.x + 140,_point.y);
}];
}else {
[UIView animateWithDuration:0.2 animations:^{
self.tabBarController.view.transform = CGAffineTransformIdentity;
self.tabBarController.view.center = _point;
}];
}
}