//
// CategoryViewController.m
// scxhgh
//
// Created by xmkjsoft on 2024/7/16.
//
#import "CategoryViewController.h"
#import "SideMenuViewController.h" // 引入侧边栏控制器的头文件
#import "NavigationBarUtils.h"
@interface CategoryViewController ()
@property (nonatomic , strong) SideMenuViewController *sideMenuViewController;
@property (nonatomic , assign ) BOOL isSideMenuVisible;
@end
@implementation CategoryViewController
- (void)viewDidLoad {
**super** viewDidLoad;
// Do any additional setup after loading the view.
**self** setupNavigationBarStyle;
self.title=@"商品分类";
NavigationBarUtils setupNavigationBarStyleForViewController:**self**;
// 设置导航栏带徽章的按钮
NavigationBarUtils setupNavigationBarWithBadgeForViewController:**self** withText:@"99+" selector:**@selector**(leftButtonTapped:);
// 初始化侧边菜单控制器
self.sideMenuViewController = \[SideMenuViewController alloc init];
}
- (void)leftButtonTapped:(UIButton *)sender {
NSLog(@"Left Button Tapped!");
// 这里可以添加逻辑,例如打开一个视图控制器或执行其他操作
**self** toggleSideMenu;
}
- (void)toggleSideMenu {
if (self.isSideMenuVisible) {
NSLog(@"关");
**self** hideSideMenu;
} else {
NSLog(@"开");
**self** showSideMenu;
}
}
- (void)showSideMenu {
CGFloat sideMenuWidth = 300;
// 获取主窗口,兼容 iOS 12 及以下版本
UIWindow *window;
if (@available(iOS 13.0, *)) {
window = UIApplication.sharedApplication.windows.firstObject;
} else {
window = UIApplication.sharedApplication.keyWindow;
}
CGRect sideMenuFrame = CGRectMake(0, 0, sideMenuWidth, CGRectGetHeight(window.bounds));
self.sideMenuViewController.view.frame = sideMenuFrame;
UIView *maskView = \[UIView alloc initWithFrame:window.bounds];
maskView.backgroundColor = UIColor colorWithWhite:0 alpha:0.5;
window addSubview:maskView;
window addSubview:**self**.sideMenuViewController.view;
[UIView animateWithDuration:0.8 animations:^{
CGRect newFrame = CGRectMake(0, 0, sideMenuWidth, CGRectGetHeight(window.bounds));
self.sideMenuViewController.view.frame = newFrame;
} completion:nil];
UITapGestureRecognizer *tapGesture = \[UITapGestureRecognizer alloc initWithTarget:self action:@selector(hideSideMenu)];
maskView addGestureRecognizer:tapGesture;
self .isSideMenuVisible = YES;
}
- (void)hideSideMenu {
// 获取主窗口,兼容 iOS 12 及以下版本
UIWindow *window;
if (@available(iOS 13.0, *)) {
window = UIApplication.sharedApplication.windows.firstObject;
} else {
window = UIApplication.sharedApplication.keyWindow;
}
CGFloat sideMenuWidth = CGRectGetWidth(self.sideMenuViewController.view.frame);
[UIView animateWithDuration:0.3 animations:^{
CGRect newFrame = CGRectMake(-sideMenuWidth, 0, sideMenuWidth, CGRectGetHeight(window.bounds));
self.sideMenuViewController.view.frame = newFrame;
} completion:^(BOOL finished) {
**self**.sideMenuViewController.view removeFromSuperview;
for (UIView *subview in window.subviews) {
if (subview isKindOfClass:\[UIView class] && subview.backgroundColor && CGColorEqualToColor(subview.backgroundColor.CGColor, UIColor colorWithWhite:0 alpha:0.5.CGColor)) {
subview removeFromSuperview;
break;
}
}
}];
self .isSideMenuVisible = NO;
}
- (void)setupNavigationBarStyle {
// 设置导航栏背景色和文字颜色
if (@available(iOS 15.0, *)) {
// 创建导航栏外观对象
UINavigationBarAppearance *navigationBarAppearance = \[UINavigationBarAppearance alloc init];
// 设置导航栏背景色
navigationBarAppearance configureWithOpaqueBackground;
navigationBarAppearance.backgroundColor = UIColor colorWithRed:(255/255.0) green:(111/255.0) blue:(97/255.0) alpha:1.0;
// 设置标题文字颜色
navigationBarAppearance.titleTextAttributes = @{NSForegroundColorAttributeName : UIColor whiteColor};
// 应用到导航栏
self.navigationController.navigationBar.standardAppearance = navigationBarAppearance;
self.navigationController.navigationBar.scrollEdgeAppearance = navigationBarAppearance;
} else {
// iOS 14及以下版本的处理逻辑
self.navigationController.navigationBar.barTintColor = UIColor colorWithRed:(255/255.0) green:(111/255.0) blue:(97/255.0) alpha:1.0;
self.navigationController.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName : UIColor whiteColor};
}
}
/*
#pragma mark - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
// Get the new view controller using segue destinationViewController.
// Pass the selected object to the new view controller.
}
*/
@end