swift - 将 WKInterfaceController 类升级到新的 SwiftUI 结构/视图
问题描述
目前在 iOS 和 watchOS 上有一个正在运行的解决方案。随着即将到来的 SwiftUI 的好消息,可能性正在扩大,同时我们对此表示怀疑。我的问题是:我有很多:
import WatchKit
import Foundation
class LoginInterfaceController : WKInterfaceController {
@IBOutlet weak var label: WKInterfaceLabel!
var timer: Timer!
var connection = true
...
我想将这些观点转变为:
import SwiftUI
@available(watchOSApplicationExtension 6.0, *)
struct FirstView: View {
var body: some View {
LoginView(email: "", pass: "")
}
}
@available(watchOSApplicationExtension 6.0, *)
struct LoginView : View {
@State var email: String
@State var pass: String
var body: some View {
VStack(alignment: .leading) {
...
如何调用和呈现新视图?今天我称之为:presentController(withName: "LoginPlease", context: text)
,找不到旧视图的东西现在是一个新的......
解决方案
要呈现纯 SwiftUI 视图,请使用WKHostingController
.
在这个很棒的 WWDC 2019 视频中了解更多信息:watchOS 上的 SwiftUI。
示例:
class HostingController: WKHostingController<MyView> {
override var body: MyView {
MyView()
}
}
要重用现有的接口对象,请创建一个符合WKInterfaceObjectRepresentable
.
示例:
struct WatchMapView: WKInterfaceObjectRepresentable {
var landmark: Landmark
func makeWKInterfaceObject(context: WKInterfaceObjectRepresentableContext<WatchMapView>) -> WKInterfaceMap {
// Return the interface object that the view displays.
return WKInterfaceMap()
}
func updateWKInterfaceObject(_ map: WKInterfaceMap, context: WKInterfaceObjectRepresentableContext<WatchMapView>) {
// Update the interface object.
let span = MKCoordinateSpan(latitudeDelta: 0.02,
longitudeDelta: 0.02)
let region = MKCoordinateRegion(
center: landmark.locationCoordinate,
span: span)
map.setRegion(region)
}
}
在重用预先存在的视图时,集成 SwiftUI是您正在寻找的 WWDC 视频。
这也是一个很好的资源:Building watchOS App Interfaces with SwiftUI。
推荐阅读
- python - 无法在python中使用正则表达式从字符串中获取整个链接
- javascript - 如何对json数据进行分类
- mysql - 在heroku上进行狂欢迁移的Mysql语法错误
- dialogflow-es - 如何在 Web 演示(对话流)中发送连续文本消息?
- scala - 使用 Apache Spark SQL 查找间隔最长且无事故的设施
- php - Laravel - 从另一个表(无关系)获取数据并显示在视图中
- amazon-web-services - 如何查看弹性beantalk实例的公共IP地址以将mongodb atlas列入白名单
- python - 按 ip 地址对元组列表进行排序
- javascript - 替代 flexDirection : '行'
- python - 如何在 np.float64 中找到任意数字的下一个或上一个数字?