美文网首页Mac·iOS开发
UIKit中一些比较生疏的类的整理笔记

UIKit中一些比较生疏的类的整理笔记

作者: Sweet丶 | 来源:发表于2021-07-16 10:02 被阅读0次

    UIKit中有一些类我们不常用,但是需要我们去了解的,这里做一个总结!

    1. UIWindowScene @available(iOS 13.0, *)

    iOS13系统新出的多场景窗口功能(多个场景窗口仅iPad应用可以配置,iPhone应用只能一个窗口),UIWindowScene是一个代表一个场景的类,继承自UIScene。我们在开发中如果是iPhone应用并且是开发iOS13以上的APP,那么可以使用SceneDelegate的那一套,否则建议删掉SceneDelegate的那一套。
    关于多场景窗口功能具体可以查看iOS使用SceneDelegate

    2.UITraitCollection @available(iOS 8.0, *)

    系统的设置特征修改会放在UITraitCollection这个类中,我们在iOS13暗黑模式适配时经常会用到这个类。
    类的属性:

    // 描述设备类型的枚举phone、pad、tv、carplay、mac
    open var userInterfaceIdiom: UIUserInterfaceIdiom { get } 
    // 描述当前是dark、light模式
    open var userInterfaceStyle: UIUserInterfaceStyle { get }@available(iOS 12.0, *) 
    // @1x, @2x, @3x的屏幕像素比
    open var displayScale: CGFloat { get }
    // 横向、纵向大小,UIUserInterfaceSizeClass有compact紧凑、regular常规两个值
    open var horizontalSizeClass: UIUserInterfaceSizeClass { get } 
    open var verticalSizeClass: UIUserInterfaceSizeClass { get }
    // 支持的色彩色域:SRGB或者P3
    open var displayGamut: UIDisplayGamut { get }
    // 设置的文本权重
    @available(iOS 13.0, *)
     open var legibilityWeight: UILegibilityWeight { get }
    

    如何获取这个对象?
    我们UIKIt中的UIScreen、UIWindow、UIViewController、UIView都是遵守UITraitEnvironment协议的,遵守了这个协议的对象都拥有属性traitCollection

    系统设置发生变化了,对应的方法会被调用:

    @available(iOS 8.0, *)
    func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?)
    

    我们适配iOS 13系统的暗黑模式就会用到这个类

    3. NSUserActivity@available(iOS 8.0, *)

    NSUserActivity对象提供了一种轻量级的方法来捕获应用程序的状态并在以后使用。您可以创建用户活动对象,并使用它们捕获有关用户正在执行的操作的信息,例如查看应用程序内容、编辑文档、查看网页或观看视频。当系统启动您的应用程序并且活动对象可用时,您的应用程序可以使用该对象中的信息将自身还原到适当的状态。Spotlight还使用用户活动对象来改进用户的搜索结果。

    它处理的事情有:

    • Universal Links: Universal links 是可以在关联应用或者 Safari 中打开的 URL。
    • SiriKit: Siri 可以调起你的应用并且告知你它想要做什么。
    • Spotlight: 定义你的应用可以做的动作,这些动作会被引入 Spotlight 的搜索结果中。
    • Handoff: 即“接力”,指一个应用可以继续另一个应用的工作,或者一台设备上的相同应用可以继续另一个设备上的应用的工作。
      详细的使用方式见在 SwiftUI 中使用 NSUserActivity
    4. UIImageAsset @available(iOS 8.0, *)

    这个类比较简单,主要关注3个方法:

    open func image(with configuration: UIImage.Configuration) -> UIImage
    
    open func register(_ image: UIImage, with configuration: UIImage.Configuration)
    
    open func unregisterImage(with configuration: UIImage.Configuration) 
    

    应用举例:比如我们适配暗黑模式,某个控件要在暗黑和明亮模式下显示不同图片,这个时候我们一是可以在image.asset里面手动配置; 二是,如果我们是网络加载的,这种情况如果还希望实现这个自动切换,那就需要自己使用UIImageAsset来做:

    let dark = UIImage(named: "frowney.png")
    let light = UIImage(named: "smiley.png")
    let asset : UIImageAsset = UIImageAsset.init()
    var darkTrait : UITraitCollection?
    var lightTrait : UITraitCollection?
    if #available(iOS 12.0, *) {
         darkTrait = UITraitCollection(userInterfaceStyle: .dark)
         lightTrait = UITraitCollection(userInterfaceStyle: .light)
         asset.register(dark!, with: darkTrait!)
         asset.register(light!, with: lightTrait!)
    }
    imgV.image = light
    

    上述代码实现后的效果是,在光亮模式下显示的smiley.png, 在暗黑模式下显示的是frowney.png

    相关文章

      网友评论

        本文标题:UIKit中一些比较生疏的类的整理笔记

        本文链接:https://www.haomeiwen.com/subject/prcspltx.html