Mac·iOS开发

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

2021-07-16  本文已影响0人  Sweet丶

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

上一篇下一篇

猜你喜欢

热点阅读