//
// 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**