在 ViewController 获取 SceneDelegate
self.view.window.windowScene.delegate as? SceneDelegate
self.view.window.windowScene.delegate as? SceneDelegate
UIButton 支持设置 contentEdgeInsets、titleEdgeInsets、imageEdgeIntets, 其中 contentEdgeInsets 会影响 instrinsicConentSize,而 titleEdgeInsets 和 imageEdgeInsets 则不然。此外因为都是 UIEdgeInsets,不支持 NSDirectionalEdgeInsets,所以需要自己通过 userInterfaceLayoutDirection 获取阅读方向。
首先在 package.swift 里增加对应的参数 defaultLocalizaiton,并为 targets 设置 resources
通过解析 URLComponents 获取 URL 参数。
通过 UIView 的 layer.cornerRadius 可以设置圆角;此外还可以通过 layer.maskedCorners 指定圆角生效的位置。
可以通过 Data(contentsOf:) 获取图片数据后再通过 UIImage(data:) 得到图片。
使用 async 创建可能阻塞线程的操作,使用 await 调用。await 可以用在方法调用、属性、for 循环以及队列中。
iOS15 带来了新的 API,类似 OCR,可以使用相机实时图片中的文本,并自动填充到文本控件中。可以通过设置 UITextContentType 或 UIKeyboardType ,或使用新的 Action.captureTextFromCamera(responder:, identifier:) 实现,或自定义 Image View 实现 UIKeyInput 协议。
新的 Smart Rotate、Widget Suggestions 特性,可以让智能堆叠内的小组件根据优先级、时效自动排序。
新的 Object Capture API 让开发者可以用图片快速为 AR 创建 3D 模型。以往可能需要专门的设计师建模,模型越复杂成本越高,而基于机器学习的 Object Capture API 可以很快,拍几张照片的功夫,就创建一个 3D 模型。
新的 StoreKit 2 包含 Products / Purchases / Transaction Info / Transaction history / Subscription status,基于 Swift async/await 设计,只需一行代码即可完成支付,还可以指定 appAccountToken 标识交易,打通自建账号系统;此外借由 automatic validation,可以方便的在 iOS 端完成支付验证,当然自定义验证依然支持;通过监听 transaction update,可以更好的处理一些需要额外验证操作的交易。
新的 UISheetPresentationController 类实现可定制的弹出层,所有样式可以使用实例属性修改。最简单的使用方法就是,获取之前弹出层控制器的 sheetPresentationController 属性并设置。
Core Data 实践备忘
使用统一链接(Universal Links)可以实现一个规则即可将链接分发到你的应用或默认网站。也就是当用户访问或准备打开一个链接,如扫描了链接的二维码,如果手机上安装了指定应用就会自动跳转到应用,如果没有,浏览器就会默认打开链接的网址。