ProjectBySwift-02-CustomFont

本文介绍了一个简单的Swift项目,通过点击按钮实现字体的更改。利用UITableView和UIButton等控件完成界面展示。文中还探讨了Swift语言中的as!作用、注册系统cell的方法、在extension中编写协议方法等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第二个Swift小练习
写这篇博客的目的:总结内容,记录学习;
【说明】:
1.该系列Swift项目联系均来自gitHub上一位大牛的贡献:https://github.com/allenwong/30DaysofSwift
2.如果任何不对或者不适合的地方请多多指教。

【小练习的功能】

1.点击changeFont按钮会更改文字的字体
2.使用控件:UItableView、UIButton
3.界面展示:
这里写图片描述

【知识点】

1.as!的作用

【说明】这是一段设置导航栏title颜色和字体大小的代码。其中用到了as?,在这里的作用是类型转换,将dict这种类型转换为 [String : Any]类型。

2.注册系统cell
第一种方法:

    tableView?.register(UITableViewCell.self, forCellReuseIdentifier: "systemCell")

第二种方法:

tableView?.register(        UITableViewCell.classForCoder(), forCellReuseIdentifier: "systemCell")

【说明】
OC中注册系统cell:

[_tableView registerNib:[UINib nibWithNibName:NSStringFromClass([UITableViewCell class]) bundle:nil] forCellReuseIdentifier:@"UITableViewCell"];

类比一下你就会明白UITableViewCell.self是指UItableView这个类。而classForCoder()的声明是这样的var classForCoder: AnyClass { get },可以获取到任何类。

3.在extension中写协议方法
这里写图片描述
这个延展是独立于类代码之外的。你想想OC中很多协议方法都在同一个类中是不是很乱,Swift已经都将它放在一起了,这样会代码会看着舒服些。另外你按照OC的传统写法也是可以的啊。但是Swift推荐用extension。

4.cell中不用判断是否为nil

参考3的图片,可以看到,因为当我写上` if cell == nil {

cell = UITableViewCell.init(style: UITableViewCellStyle.default, reuseIdentifier: "systemCell")

}
`的时候,会直接报出警告“UITableViewCell” to nil always returns false

5.我是用一个布尔值判断是否更新UI和一个int类型记录点击次数,从而设定布尔值。
6.项目链接:

【补充】
1.获取系统字体的方法

override func viewDidLoad() {
        super.viewDidLoad()

        // 获取当前字体信息
        let currentFont = UIFont.systemFont(ofSize: UIFont.systemFontSize)
        print(currentFont)

        // 获取系统所有字体
        let familyNameArray = NSMutableArray()
        let familyNameAll = UIFont.familyNames

        for family in familyNameAll{

            let fonts = UIFont.fontNames(forFamilyName: family)
            for font in fonts {

                familyNameArray.add(font)
            }
        }
        print(familyNameArray)

    }

打印结果:

<UICTFont: 0x7fb9b650bed0> font-family: ".SFUIText"; font-weight: normal; font-style: normal; font-size: 14.00pt
(
    "Copperplate-Light",
    Copperplate,
    "Copperplate-Bold",
    "KohinoorTelugu-Regular",
    "KohinoorTelugu-Medium",
    "KohinoorTelugu-Light",
    Thonburi,
    "Thonburi-Bold",
    "Thonburi-Light",
    "CourierNewPS-BoldMT",
    "CourierNewPS-ItalicMT",
    CourierNewPSMT,
    "CourierNewPS-BoldItalicMT",
    "GillSans-Italic",
    "GillSans-Bold",
    "GillSans-BoldItalic",
    "GillSans-LightItalic",
    GillSans,
    "GillSans-Light",
    "GillSans-SemiBold",
    "GillSans-SemiBoldItalic",
    "GillSans-UltraBold",
    "AppleSDGothicNeo-Bold",
    "AppleSDGothicNeo-UltraLight",
    "AppleSDGothicNeo-Thin",
    "AppleSDGothicNeo-Regular",
    "AppleSDGothicNeo-Light",
    "AppleSDGothicNeo-Medium",
    "AppleSDGothicNeo-SemiBold",
    "MarkerFelt-Thin",
    "MarkerFelt-Wide",
    "AvenirNextCondensed-BoldItalic",
    "AvenirNextCondensed-Heavy",
    "AvenirNextCondensed-Medium",
    "AvenirNextCondensed-Regular",
    "AvenirNextCondensed-HeavyItalic",
    "AvenirNextCondensed-MediumItalic",
    "AvenirNextCondensed-Italic",
    "AvenirNextCondensed-UltraLightItalic",
    "AvenirNextCondensed-UltraLight",
    "AvenirNextCondensed-DemiBold",
    "AvenirNextCondensed-Bold",
    "AvenirNextCondensed-DemiBoldItalic",
    TamilSangamMN,
    "TamilSangamMN-Bold",
    "HelveticaNeue-Italic",
    "HelveticaNeue-Bold",
    "HelveticaNeue-UltraLight",
    "HelveticaNeue-CondensedBlack",
    "HelveticaNeue-BoldItalic",
    "HelveticaNeue-CondensedBold",
    "HelveticaNeue-Medium",
    "HelveticaNeue-Light",
    "HelveticaNeue-Thin",
    "HelveticaNeue-ThinItalic",
    "HelveticaNeue-LightItalic",
    "HelveticaNeue-UltraLightItalic",
    "HelveticaNeue-MediumItalic",
    HelveticaNeue,
    "GurmukhiMN-Bold",
    GurmukhiMN,
    TimesNewRomanPSMT,
    "TimesNewRomanPS-BoldItalicMT",
    "TimesNewRomanPS-ItalicMT",
    "TimesNewRomanPS-BoldMT",
    "Georgia-BoldItalic",
    Georgia,
    "Georgia-Italic",
    "Georgia-Bold",
    AppleColorEmoji,
    ArialRoundedMTBold,
    "Kailasa-Bold",
    Kailasa,
    "KohinoorDevanagari-Light",
    "KohinoorDevanagari-Regular",
    "KohinoorDevanagari-Semibold",
    "KohinoorBangla-Semibold",
    "KohinoorBangla-Regular",
    "KohinoorBangla-Light",
    "ChalkboardSE-Bold",
    "ChalkboardSE-Light",
    "ChalkboardSE-Regular",
    "SinhalaSangamMN-Bold",
    SinhalaSangamMN,
    "PingFangTC-Medium",
    "PingFangTC-Regular",
    "PingFangTC-Light",
    "PingFangTC-Ultralight",
    "PingFangTC-Semibold",
    "PingFangTC-Thin",
    "GujaratiSangamMN-Bold",
    GujaratiSangamMN,
    DamascusLight,
    DamascusBold,
    DamascusSemiBold,
    DamascusMedium,
    Damascus,
    "Noteworthy-Light",
    "Noteworthy-Bold",
    GeezaPro,
    "GeezaPro-Bold",
    "Avenir-Medium",
    "Avenir-HeavyOblique",
    "Avenir-Book",
    "Avenir-Light",
    "Avenir-Roman",
    "Avenir-BookOblique",
    "Avenir-MediumOblique",
    "Avenir-Black",
    "Avenir-BlackOblique",
    "Avenir-Heavy",
    "Avenir-LightOblique",
    "Avenir-Oblique",
    AcademyEngravedLetPlain,
    DiwanMishafi,
    "Futura-CondensedMedium",
    "Futura-CondensedExtraBold",
    "Futura-Medium",
    "Futura-MediumItalic",
    "Futura-Bold",
    Farah,
    KannadaSangamMN,
    "KannadaSangamMN-Bold",
    "ArialHebrew-Bold",
    "ArialHebrew-Light",
    ArialHebrew,
    ArialMT,
    "Arial-BoldItalicMT",
    "Arial-BoldMT",
    "Arial-ItalicMT",
    Gaspar,
    PartyLetPlain,
    Chalkduster,
    "HoeflerText-Italic",
    "HoeflerText-Regular",
    "HoeflerText-Black",
    "HoeflerText-BlackItalic",
    "Optima-Regular",
    "Optima-ExtraBlack",
    "Optima-BoldItalic",
    "Optima-Italic",
    "Optima-Bold",
    "Palatino-Bold",
    "Palatino-Roman",
    "Palatino-BoldItalic",
    "Palatino-Italic",
    LaoSangamMN,
    "MalayalamSangamMN-Bold",
    MalayalamSangamMN,
    "AlNile-Bold",
    AlNile,
    "BradleyHandITCTT-Bold",
    "PingFangHK-Ultralight",
    "PingFangHK-Semibold",
    "PingFangHK-Thin",
    "PingFangHK-Light",
    "PingFangHK-Regular",
    "PingFangHK-Medium",
    "Trebuchet-BoldItalic",
    TrebuchetMS,
    "TrebuchetMS-Bold",
    "TrebuchetMS-Italic",
    "Helvetica-Bold",
    Helvetica,
    "Helvetica-LightOblique",
    "Helvetica-Oblique",
    "Helvetica-BoldOblique",
    "Helvetica-Light",
    "Courier-BoldOblique",
    Courier,
    "Courier-Bold",
    "Courier-Oblique",
    "Cochin-Bold",
    Cochin,
    "Cochin-Italic",
    "Cochin-BoldItalic",
    "HiraMinProN-W6",
    "HiraMinProN-W3",
    DevanagariSangamMN,
    "DevanagariSangamMN-Bold",
    OriyaSangamMN,
    "OriyaSangamMN-Bold",
    "SnellRoundhand-Bold",
    SnellRoundhand,
    "SnellRoundhand-Black",
    ZapfDingbatsITC,
    "BodoniSvtyTwoITCTT-Bold",
    "BodoniSvtyTwoITCTT-Book",
    "BodoniSvtyTwoITCTT-BookIta",
    "Verdana-Italic",
    "Verdana-BoldItalic",
    Verdana,
    "Verdana-Bold",
    "AmericanTypewriter-CondensedLight",
    AmericanTypewriter,
    "AmericanTypewriter-CondensedBold",
    "AmericanTypewriter-Light",
    "AmericanTypewriter-Semibold",
    "AmericanTypewriter-Bold",
    "AmericanTypewriter-Condensed",
    "AvenirNext-UltraLight",
    "AvenirNext-UltraLightItalic",
    "AvenirNext-Bold",
    "AvenirNext-BoldItalic",
    "AvenirNext-DemiBold",
    "AvenirNext-DemiBoldItalic",
    "AvenirNext-Medium",
    "AvenirNext-HeavyItalic",
    "AvenirNext-Heavy",
    "AvenirNext-Italic",
    "AvenirNext-Regular",
    "AvenirNext-MediumItalic",
    "Baskerville-Italic",
    "Baskerville-SemiBold",
    "Baskerville-BoldItalic",
    "Baskerville-SemiBoldItalic",
    "Baskerville-Bold",
    Baskerville,
    KhmerSangamMN,
    "Didot-Italic",
    "Didot-Bold",
    Didot,
    SavoyeLetPlain,
    BodoniOrnamentsITCTT,
    Symbol,
    "Menlo-Italic",
    "Menlo-Bold",
    "Menlo-Regular",
    "Menlo-BoldItalic",
    "BodoniSvtyTwoSCITCTT-Book",
    Papyrus,
    "Papyrus-Condensed",
    "HiraginoSans-W3",
    "HiraginoSans-W6",
    "PingFangSC-Ultralight",
    "PingFangSC-Regular",
    "PingFangSC-Semibold",
    "PingFangSC-Thin",
    "PingFangSC-Light",
    "PingFangSC-Medium",
    "MyanmarSangamMN-Bold",
    MyanmarSangamMN,
    "EuphemiaUCAS-Italic",
    EuphemiaUCAS,
    "EuphemiaUCAS-Bold",
    Zapfino,
    "BodoniSvtyTwoOSITCTT-Book",
    "BodoniSvtyTwoOSITCTT-Bold",
    "BodoniSvtyTwoOSITCTT-BookIt"
)

2.获取系统字体方法

->将你的字体文件(以.otf或者.ttf为后缀的文件)拖入到项目中
这里写图片描述
->在info.plist文件中添加“Fonts provided by application”字段,并将你的字体文件名称完整写出来。
这里写图片描述
->在【Target-BuildPhase-Copy Bundle Resources】中看看是否有你刚刚添加的字体文件名称,有就说明添加好了,没有你自己再手动加一下。接下来你就可以直接根据字体名字在代码中使用了。
这里写图片描述

3.xib使用字体

选择custom之后选择你想要的字体就可以了
这里写图片描述

Swift初学者,如果有不合理或者不正确的地方,还请指正。共同进步。

内容概要:本文以电商仓储物流机器人为案例,深度解析机器人开发全流程,涵盖ROS系统搭建、SLAM建图、路径规划、机械臂控制、多机调度等核心技术。首先介绍了分层模块化架构和核心硬件选型,如主控制器、激光雷达、深度相机、驱动底盘和协作机械臂。接着详细讲述了ROS系统开发的核心实战,包括环境感知与SLAM建图、自主导航与动态避障等技术,提供了代码示例和技术关键点。然后探讨了机械臂抓取任务开发,涉及视觉定位系统、运动规划与力控制。随后介绍了多机器人集群调度系统的任务分配模型和通信架构设计。还讨论了安全与可靠性保障措施,包括硬件级安全设计和软件容错机制。最后总结了实战问题与解决方案,以及性能优化成果,并推荐了四大核心代码库和仿真训练平台。 适合人群:对机器人开发感兴趣的研发人员,尤其是有一定编程基础并希望深入了解仓储机器人开发的技术人员。 使用场景及目标:①学习仓储机器人从系统集成到底层硬件部署的全流程;②掌握ROS系统开发的核心技术,如SLAM建图、路径规划、机械臂控制等;③理解多机器人集群调度和安全可靠性设计;④解决实际开发中的常见问题并优化系统性能。 阅读建议:本文内容详实,涵盖了从硬件选型到软件开发的各个方面,建议读者结合实际项目需求,逐步深入学习,并通过实践操作加深理解。同时,利用提供的开源项目和仿真训练平台进行实验和验证。
资源下载链接为: https://pan.quark.cn/s/b7174785e9d3 在西安交通大学的模拟电子技术课程中,Tina 仿真软件得到了广泛应用。Tina 软件由欧洲 DesignSoft Kft. 公司研发,是一款重要的现代化 EDA 软件,可用于模拟及数字电路的仿真分析,在全球四十多个国家流行,拥有二十余种语言版本,包括中文版,内置约两万多个分立或集成电路元器件。 在模拟电路分析方面,Tina 功能强大,具备直流分析、瞬态分析、正弦稳态分析、傅立叶分析、温度扫描、参数扫描、最坏情况及蒙特卡罗统计等常规仿真功能。它还能依据输出电量指标对电路元件参数进行优化计算,具有符号分析功能,可给出时域过渡过程表达式或频域传递函数表达式,并且支持 RF 仿真分析,能绘制零、极点图、相量图、Nyquist 图等。 在数字电路分析方面,Tina 支持 VHDL 语言,拥有 BUS 总线及虚拟连线功能,使电路绘图界面更清晰简洁。该软件可执行电路的 DC、AC、瞬态、傅立叶、噪声等分析,并提供函数发生器、万用表、示波器、XY 记录仪和信号分析仪等虚拟仪器,方便学生进行电路测试与测量。 在西安交通大学,杨建国老师在模拟电子技术领域有着深厚造诣。他是博士生导师,研究方向主要为电子技术及其应用,在模拟电路和单片机应用方面教学经验丰富。杨建国老师著有 6 本相关著作,如《你好,放大器》《新概念模拟电路》等,这些著作受到了广大师生的欢迎,对模拟电子技术知识的传播和教学起到了积极的推动作用 ,为学生深入学习模拟电子技术提供了丰富的知识源泉,结合 Tina 仿真软件,能助力学生更好地理解和掌握模拟电子技术的相关知识与实践技能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值