当前位置: 首页 > article >正文

ios 项目中设置左侧徽标

//

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


http://www.kler.cn/a/296878.html

相关文章:

  • 0.91寸OLED屏幕大小的音频频谱,炫酷
  • Linux入门攻坚——31、rpc概念及nfs和samba
  • websocket client无法连接到websocket server 的问题
  • Java:面向对象
  • TeeChart助力科研软件:高效实现数据可视化
  • 第L5周:机器学习:决策树(分类模型)
  • 从0到1深入理解vite
  • PostgreSQL-05-入门篇-数据分组
  • Excel--计算题目,大学生计算机等级考试常见题
  • matlab基本语法
  • 视频的容器格式和编码格式详解
  • 【Tools】什么是基座模型
  • 【动手学深度学习】09 Softmax 回归 + 损失函数 + 图片分类数据集(个人向笔记)
  • (三)悟说矩阵、矩阵变换和矩阵乘法
  • Android线性布局Linearlayout
  • springboot优雅停机无法关闭进程,kill无法停止springboot必须kill -9,springboot线程池使用
  • MyBatis 入门之核心配置文件
  • 【陪诊系统-PC管理端】菜单权限和账号绑定
  • Ansible剧本编写指南:从简单任务到复杂自动化的实现
  • macos 系统文件操作时提示 Read-only file system 解决方法