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

iOS开发之苹果系统包含的所有字体库

本篇文章没有什么技术含量,就是简单的记录一个苹果系统所有字体库的知识点

获取所有字体库的核心代码是:

// 列出所有字体家族
NSArray *fontFamilies = [UIFont familyNames];
// 每个家族包含的字体
NSArray *fonts = [UIFont fontNamesForFamilyName:@"字体家族名"];

添加一下Demo代码:

ViewController.h

#import <UIKit/UIKit.h>typedef enum : NSUInteger {/// 字体库ViewControllerType_Familys = 0,/// 字体ViewControllerType_Fonts = 1,
} ViewControllerType;@interface ViewController : UIViewController@property (nonatomic, assign) ViewControllerType pageType;/// 字体库
@property (nonatomic, strong) NSDictionary *fontsDic;@end

ViewController.m

#import "ViewController.h"
#import "FontTableViewCell.h"@interface ViewController ()<UITableViewDelegate, UITableViewDataSource>/// 列表TableView
@property (nonatomic, strong) UITableView *mineTableView;
/// 数据
@property (nonatomic, strong) NSMutableArray *dataArray;@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];self.view.backgroundColor = [UIColor whiteColor];[self initData];[self initUI];
}#pragma mark - 初始化数据
- (void)initData {if (self.pageType == ViewControllerType_Familys) {_dataArray = [NSMutableArray new];// 列出所有字体家族NSArray *fontFamilies = [UIFont familyNames];for (NSString *family in fontFamilies) {NSMutableDictionary *familyDic = [NSMutableDictionary new];[familyDic setObject:family forKey:@"fontTitle"];NSArray *fonts = [UIFont fontNamesForFamilyName:family];if (fonts.count > 0) {[familyDic setObject:fonts forKey:@"fontsList"];} else {[familyDic setObject:@[] forKey:@"fontsList"];}[_dataArray addObject:familyDic];}} else {NSArray *fontsArray = self.fontsDic[@"fontsList"];_dataArray = [[NSMutableArray alloc] initWithArray:fontsArray];}
}#pragma mark - 初始化UI
- (void)initUI {if (self.pageType == ViewControllerType_Fonts) {self.title = self.fontsDic[@"fontTitle"];}[self.view addSubview:self.mineTableView];}#pragma mark - Getter / Setter
- (UITableView *)mineTableView {if (!_mineTableView) {_mineTableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, kScreenHeight) style:UITableViewStylePlain];_mineTableView.showsVerticalScrollIndicator = NO;_mineTableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;_mineTableView.delegate = self;_mineTableView.dataSource = self;_mineTableView.backgroundColor = [UIColor clearColor];if (self.pageType == ViewControllerType_Familys) {_mineTableView.tableHeaderView = [self createHeaderView];}}return _mineTableView;
}#pragma mark - 创建头View
- (UIView *)createHeaderView {UIView *headView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, 100)];UILabel *headLab = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, 100)];headLab.text = @"苹果系统包含的所有字体库";headLab.textAlignment = NSTextAlignmentCenter;headLab.textColor = [UIColor blackColor];headLab.font = [UIFont boldSystemFontOfSize:20];headLab.backgroundColor = [UIColor cyanColor];[headView addSubview:headLab];return headView;
}#pragma mark - 列表代理 UITableViewDelegate, UITableViewDataSource
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {return 1;
}- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {return self.dataArray.count;
}- (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {FontTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"mineCell"];if (!cell) {cell = [[FontTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"mineCell"];}if (self.pageType == ViewControllerType_Familys) {[cell setHeaderDataModel:self.dataArray[indexPath.row]];} else {NSDictionary *dic = @{@"font" : self.dataArray[indexPath.row]};[cell setDataModel:dic];}return cell;
}- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {if (self.pageType == ViewControllerType_Familys) {return 44;;} else {return 88;;}
}- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {if (self.pageType == ViewControllerType_Familys) {ViewController *vc = [ViewController new];vc.pageType = ViewControllerType_Fonts;vc.fontsDic = self.dataArray[indexPath.row];[self.navigationController pushViewController:vc animated:YES];}
}@end

FontTableViewCell的代码:

FontTableViewCell.h
#import <UIKit/UIKit.h>/** 屏幕宽高 */
#define kScreenWidth   ([[UIScreen mainScreen] bounds].size.width)
#define kScreenHeight  ([[UIScreen mainScreen] bounds].size.height)NS_ASSUME_NONNULL_BEGIN@interface FontTableViewCell : UITableViewCell/// 设置数据
- (void)setDataModel:(NSDictionary *)model;/// 设置数据
- (void)setHeaderDataModel:(NSDictionary *)model;@endNS_ASSUME_NONNULL_ENDFontTableViewCell.m
#import "FontTableViewCell.h"@interface FontTableViewCell ()/// lab
@property (nonatomic, strong) UILabel *fontLab;@end@implementation FontTableViewCell- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];if (self) {self.backgroundColor = [UIColor clearColor];[self.contentView addSubview:self.fontLab];}return self;
}#pragma mark - Getter /  Setter
- (UILabel *)fontLab {if (!_fontLab) {_fontLab = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, 44)];_fontLab.textColor = [UIColor blackColor];_fontLab.textAlignment = NSTextAlignmentCenter;_fontLab.clipsToBounds = YES;}return _fontLab;
}#pragma mark - 设置数据
- (void)setDataModel:(NSDictionary *)model {self.fontLab.frame = CGRectMake(0, 0, kScreenWidth, 88);self.fontLab.text = model[@"font"];self.fontLab.font = [UIFont fontWithName:model[@"font"] size:20];}/// 设置数据
- (void)setHeaderDataModel:(NSDictionary *)model {self.fontLab.frame = CGRectMake(0, 0, kScreenWidth, 44);self.fontLab.text = model[@"fontTitle"];self.fontLab.font = [UIFont systemFontOfSize:16];}@end

最终Demo样式如下:

欢迎收藏,谢谢浏览,转载请注明出处,十分感谢~

http://www.dtcms.com/a/357148.html

相关文章:

  • 最小生成树——Kruskal
  • 【机器学习入门】3.1 关联分析——从“购物篮”到推荐系统的核心逻辑
  • 响应式编程框架Reactor【2】
  • Windows C盘完全占满会如何?
  • 2024-06-13-debian12安装Mariadb-Galera-Cluster+Nginx+Keepalived高可用多主集群
  • 毕马威 —— 公众对人工智能的信任、态度及使用情况调查
  • C++基础(②VS2022创建项目)
  • docker compose设置命令别名的方法
  • Windows WizTree-v4.27.0.0-x64[磁盘空间分析软件]
  • C++中类,this指针,构造函数,析构函数。拷贝构造函数,初步理解运算符重载,初步理解赋值运算符重载
  • 2.4G串口透传模组 XL2417D无线模块,实测通讯距离300m左右!
  • 第23章笔记|PowerShell 高级远程控制配置(端点、自定义、双向认证、多跳)
  • 常见视频编码格式对比
  • GraphRAG 知识图谱核心升级:集成 langextract 与 Gemini ----实现高精度实体与关系抽取
  • 捡捡java——2、基础05
  • Redis不同场景下的注意事项
  • 如何在FastAPI中玩转全链路追踪,让分布式系统故障无处遁形?
  • 【golang长途旅行第34站】网络编程
  • c++ template
  • Vue2+Element 初学
  • LRU 内存淘汰策略
  • 【51单片机定时1秒中断控制流水灯方向】2022-11-14
  • Geocodify 的 API
  • 以技术赋能强化消费者信任,助推餐饮服务质量提质增效的明厨亮灶开源了
  • 有鹿机器人:用智能清洁重塑多行业工作方式
  • Centos卸载anaconda
  • 微服务Eureka组件的介绍、安装、使用
  • 音频转音频
  • 数据结构:快速排序 (Quick Sort)
  • 数据结构(C语言篇):(五)单链表算法题(上)