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初学者,如果有不合理或者不正确的地方,还请指正。共同进步。

内容概要:本文详细介绍了900W或1Kw,20V-90V 10A双管正激可调电源充电机的研发过程和技术细节。首先阐述了项目背景,强调了充电机在电动汽车和可再生能源领域的重要地位。接着深入探讨了硬件设计方面,包括PCB设计、磁性器件的选择及其对高功率因数的影响。随后介绍了软件实现,特别是程序代码中关键的保护功能如过流保护的具体实现方法。此外,文中还提到了充电机所具备的各种保护机制,如短路保护、欠压保护、电池反接保护、过流保护和过温度保护,确保设备的安全性和可靠性。通讯功能方面,支持RS232隔离通讯,采用自定义协议实现远程监控和控制。最后讨论了散热设计的重要性,以及为满足量产需求所做的准备工作,包括提供详细的PCB图、程序代码、BOM清单、磁性器件和散热片规格书等源文件。 适合人群:从事电力电子产品研发的技术人员,尤其是关注电动汽车充电解决方案的专业人士。 使用场景及目标:适用于需要高效、可靠充电解决方案的企业和个人开发者,旨在帮助他们快速理解和应用双管正激充电机的设计理念和技术要点,从而加速产品开发进程。 其他说明:本文不仅涵盖了理论知识,还包括具体的工程实践案例,对于想要深入了解充电机内部构造和工作原理的人来说是非常有价值的参考资料。
内容概要:本文档详细介绍了机器人/AGV/AMR与电梯系统之间的模式切换操作指南。涵盖人工切换模式、智能自动切换以及智慧软件调控三大方面。通过AGV模式切换读卡器实现人工与机器人模式间的转换,利用无源触点隔离技术和多协议适配接口确保电梯与机器人系统的无缝对接,并设有硬件级互锁电路保障安全。智能自动切换中,机器人通过485通讯、TCP/IP等与电梯控制系统交互,在确认安全条件下启动专用模式并及时恢复。故障应急响应策略包括三级容错机制、智能诊断系统和安全优先策略,确保电梯运行的安全性和可靠性。智慧软件调控则根据场景需求灵活调整模式,提升物流高峰时段的运输效率,同时兼顾日常的人性化需求。硬件协同部分介绍了AGV电梯控制主板、楼层触点扩展板、电梯状态检测器、楼层传感器和外呼控制器等组件的作用。 适合人群:从事机器人、AGV、AMR研发与维护的技术人员,以及负责电梯系统集成和管理的专业人士。 使用场景及目标:①实现机器人/AGV/AMR与电梯系统的无缝对接;②确保模式切换过程中的安全性与可靠性;③提高物流高峰时段的运输效率;④优化日常运营中的人性化需求。 其他说明:本文档不仅提供了具体的操作步骤和技术细节,还强调了系统设计的安全性和智能化特点,适用于各类主流电梯品牌,并通过多种通信协议实现了广泛的兼容性。
内容概要:本文详细介绍了如何利用西门子200SMART PLC与两台三菱E700变频器通过Modbus RTU协议实现通信的方法。文中涵盖了硬件准备、通信协议设置、PLC程序设计、变频器设置与响应、源程序及其注释、相关软件工具和使用说明。具体来说,文章首先介绍了所需的硬件设备如PLC、变频器、通信电缆和触摸屏,然后讲解了Modbus RTU通信协议的具体设置,包括波特率、数据位等参数的配置。接着,文章展示了PLC程序的设计思路,重点在于如何用Modbus指令完成数据交互,并通过详细的注释使程序易于理解。此外,还涉及了变频器作为从站的设置方法,确保其能正确响应PLC发出的命令。最后,提供了昆仑通泰触摸屏软件、200SMART V2.4编程软件、变频器应用说明书等辅助工具,方便用户更好地掌握整个系统的运作。 适用人群:从事工业自动化领域的工程师和技术人员,尤其是那些需要深入了解PLC与变频器间通信机制的人群。 使用场景及目标:适用于希望构建高效稳定的工业控制系统的企业和个人开发者。通过学习本文提供的实例,读者可以掌握PLC与变频器之间的Modbus通信技术,从而实现对生产设备的精准控制,提升工作效率的同时减少能源消耗。 其他说明:本文不仅提供了理论指导,还有实际的操作指南和完整源代码,有助于读者快速上手实践。同时,配套的软件和文档资料也为后续的学习和项目开发打下了坚实的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值