기본적으로는 앱의 이름과 compact leading, compact trailing 뷰가 뜬다.
모든 업데이트는 자동으로 전달된다.
업데이트 얼럿이 뜰 때, 워치페이스 상태면 자동으로 스택이 뜬다.
포그라운드 상태였다면 compact 뷰들이 화면 아래에 뜨게 된다.
이를 탭하면 앱을 열 수 있는 버튼이 있는 전체 화면이 뜬다.
compact 뷰들이 적절한 정보를 전달하는지 점검하라.
supplementalActivityFamilies API를 통해서 smart stack을 지원하는 것을 나타낼 수 있다.
struct DeliveryLiveActivity: Widget {
var body: some WidgetConfiguration {
ActivityConfiguration(
for: DeliveryActivityAttributes.self
) { context in
DeliveryActivityContent(context: context)
} dynamicIsland: { context in
// ...
}
.supplementalActivityFamilies([.small])
}
}
activityFamily Environment 값을 사용해서 다른 레이아웃을 적용할 수 있다.
struct DeliveryActivityContent: View {
@Environment(\\.activityFamily) var activityFamily
var context: ActivityViewContext<DeliveryActivityAttributes>
var body: some View {
switch activityFamily {
case .small:
DeliverySmallContent(context: context)
case .medium:
DeliveryMediumContent(context: context)
@unknown default:
DeliveryMediumContent(context: context)
}
}
}
이 모든 것들은 당연히 프리뷰에서 확인이 가능하다.
기본적으로는 iOS 앱을 열게 되지만 watchOS 타겟에 “Supports Launch for Live Activity Attribute Types” 키에 값들을 추가하면 된다.
손목을 내려서 Always-On 모드로 가면 자동으로 컬러 스킴을 어둡게 바꾸고 저조도 모드로 들어간다.
이 상태도 Environment를 사용해서 대응할 수 있다.
struct DeliveryGauge: View {
@Environment(\\.isLuminanceReduced) private var isLuminanceReduced
var context: ActivityViewContext<DeliveryActivityAttributes>
var body: some View {
Gauge(value: context.state.progressPercent) {
GaugeLabel(context: context)
}
.tint(isLuminanceReduced ? .gaugeDim : .gauge)
}
}
원하면 컬러 스킴을 고정할 수도 있다.
struct DeliveryActivityContent: View {
@Environment(\\.activityFamily) var activityFamily
var context: ActivityViewContext<DeliveryActivityAttributes>
var body: some View {
switch activityFamily {
case .small:
DeliverySmallContent(context: context)
.preferredColorScheme(.light)
case .medium:
DeliveryMediumContent(context: context)
@unknown default:
DeliveryMediumContent(context: context)
}
}
}