如何在 WidgetKit 中使用 Link 来定义任意区域,而不仅仅是文本链接?
How to use Link in WidgetKit to define arbitrary regions, not just text links?
在 WWDC 2020 的 session“第 2 部分的小部件代码”中,the presenter says:
Widgets do not have animation or custom interactions, but we can deep link from our widget into our app. SystemSmall widgets are one large tap area, while systemMedium and systemLarge can use the new SwiftUI link API to create tappable zones within the widget.
这表明我应该能够将我的小部件的区域指定为可点击的,从而导致我的应用程序中的给定 URL。但是 Link
API 只需要一个字符串标题和一个目标 URL - 它似乎无法嵌入其他任意视图,如图像。
如何使用 Link
API 将小部件的区域指定为可点击,而不仅仅是文本链接?
Link
的类型定义实际上是 struct Link<Label> where Label : View
所以 Label
的唯一约束是它符合 View
协议(尽管名称另有说明) .我首选的初始值设定项是 init(destination:, label:)
,因此您可以像这样在视图构建器中嵌入每个视图:
Link(destination: URL(string: "some://dest")!) {
HStack {
Text("I'm part of the tappable area")
Text("Me too")
}
}
您实际上可以在 Apple 的 Emoji Rangers 项目中看到这一点(查看 AllCharactersView.swift
。
在 WWDC 2020 的 session“第 2 部分的小部件代码”中,the presenter says:
Widgets do not have animation or custom interactions, but we can deep link from our widget into our app. SystemSmall widgets are one large tap area, while systemMedium and systemLarge can use the new SwiftUI link API to create tappable zones within the widget.
这表明我应该能够将我的小部件的区域指定为可点击的,从而导致我的应用程序中的给定 URL。但是 Link
API 只需要一个字符串标题和一个目标 URL - 它似乎无法嵌入其他任意视图,如图像。
如何使用 Link
API 将小部件的区域指定为可点击,而不仅仅是文本链接?
Link
的类型定义实际上是 struct Link<Label> where Label : View
所以 Label
的唯一约束是它符合 View
协议(尽管名称另有说明) .我首选的初始值设定项是 init(destination:, label:)
,因此您可以像这样在视图构建器中嵌入每个视图:
Link(destination: URL(string: "some://dest")!) {
HStack {
Text("I'm part of the tappable area")
Text("Me too")
}
}
您实际上可以在 Apple 的 Emoji Rangers 项目中看到这一点(查看 AllCharactersView.swift
。