问题描述
在 WatchOS 中创建静态复杂功能的最基本方法是什么? 我已经遇到了让它工作的问题。所以我设置了一些 在预览中正确显示的并发症视图。 我有 SampleTemplate ,它似乎也能正常工作。我提供 当前的时间线条目和未来的时间线条目。 但是当我运行模拟器时,圆形时间线条目没有出现在 实际表盘见下图。有人可以展示它是如何完成的吗?
//// ComplicationController.swift
import ClockKit
import SwiftUI
class ComplicationController: NSObject,CLKComplicationDataSource {
let headlines = MainViewModel()
// MARK: - Complication Configuration
func getComplicationDescriptors(handler: @escaping ([CLKComplicationDescriptor]) -> Void) {
let descriptors = [
CLKComplicationDescriptor(identifier: "complication",displayName: "TFwatch",supportedFamilies: CLKComplicationFamily.allCases)
// Multiple complication support can be added here with more descriptors
]
// Call the handler with the currently supported complication descriptors
handler(descriptors)
}
func handleSharedComplicationDescriptors(_ complicationDescriptors: [CLKComplicationDescriptor]) {
// Do any necessary work to support these newly shared complication descriptors
}
// MARK: - Timeline Configuration
func getTimelineEndDate(for complication: CLKComplication,withHandler handler: @escaping (Date?) -> Void) {
// Call the handler with the last entry date you can currently provide or nil if you can't support future timelines
handler(nil)
}
func getPrivacyBehavior(for complication: CLKComplication,withHandler handler: @escaping (CLKComplicationPrivacyBehavior) -> Void) {
// Call the handler with your desired behavior when the device is locked
handler(.showOnLockScreen)
}
// MARK: - Timeline Population
func getCurrentTimelineEntry(for complication: CLKComplication,withHandler handler: @escaping (CLKComplicationTimelineEntry?) -> Void) {
// Call the handler with the current timeline entry
handler(nil)//
if let ctemplate = makeTemplate(for: headlines,complication: complication) {
let entry = CLKComplicationTimelineEntry(
date: Date(),complicationTemplate: ctemplate)
handler(entry)
} else {
handler(nil)
}
}
func getTimelineEntries(for complication: CLKComplication,after date: Date,limit: Int,withHandler handler: @escaping ([CLKComplicationTimelineEntry]?) -> Void) {
// Call the handler with the timeline entries after the given date
//handler(nil)
let fiveMinutes = 5.0 * 60.0
var entries: [CLKComplicationTimelineEntry] = []
var current = date
let endDate = Date()
//= (timeline.last?.date ?? date).addingTimeInterval(Appointment.oneHour)
while (current.compare(endDate) == .orderedAscending) && (entries.count < limit) {
if let ctemplate = makeTemplate(for: headlines,complication: complication) {
let entry = CLKComplicationTimelineEntry(
date: current,complicationTemplate: ctemplate)
entries.append(entry)
}
current = current.addingTimeInterval(fiveMinutes)
}
handler(entries)
}
// MARK: - Sample Templates
func getLocalizableSampleTemplate(for complication: CLKComplication,withHandler handler: @escaping (CLKComplicationTemplate?) -> Void) {
// This method will be called once per supported complication,and the results will be cached
let ctemplate = makeTemplate(for: headlines,complication: complication)
handler(ctemplate)
//handler(nil)
}
}
extension ComplicationController {
func makeTemplate(
for headlines: MainViewModel,complication: CLKComplication
) -> CLKComplicationTemplate? {
switch complication.family {
case .graphicCircular:
return CLKComplicationTemplateGraphicCircularView(
ComplicationViewCircular(headlines: headlines))
case .graphicCorner:
return CLKComplicationTemplateGraphicCornerCircularView(
ComplicationViewCornerCircular(headlines: headlines))
default:
return nil
}
}
}
//// ComplicationViews.swift
import SwiftUI
import ClockKit
// 1
struct CircularProgressArc: Shape {
@State var progress: Double = 0.5
func path(in rect: CGRect) -> Path {
var path = Path()
let limit = 0.99
let halfarc: Double = max(0.01,min(progress,limit)) * 180.0
path.addArc(
center: CGPoint(x: rect.midX,y: rect.midY),radius: rect.width / 2,startAngle: .degrees(90 - halfarc),endAngle: .degrees(90 + halfarc),clockwise: true)
return path
}
}
// 2
struct ProgressArc<S>: ProgressViewStyle where S: ShapeStyle {
// 3
var strokeContent: S
var strokeStyle: StrokeStyle
init(
_ strokeContent: S,strokeStyle style: StrokeStyle =
StrokeStyle(lineWidth: 10.0,lineCap: .round)
) {
self.strokeContent = strokeContent
self.strokeStyle = style
}
// 4
func makeBody(configuration: Configuration) -> some View {
CircularProgressArc(progress: configuration.fractionCompleted ?? 0.0)
.stroke(strokeContent,style: strokeStyle)
.shadow(radius: 5.0)
}
}
// 1
struct ComplicationViewCircular: View {
// 2
@ObservedObject var headlines : MainViewModel
var body: some View {
// 3
ZStack {
ProgressView(
"PPP",value: (1.0 - 0.25),total: 1.0)
.progressViewStyle(
CircularProgressViewStyle(tint: Color.blue))
}
}
}
// 1
struct ComplicationViewCornerCircular: View {
// 2
@ObservedObject var headlines : MainViewModel
var body: some View {
ZStack {
// Circle()
// .fill(Color.white)
CircleView()
.complicationForeground()
}
// 3
}
}
struct ComplicationViewRectangular: View {
//@State var appointment: Appointment
var body: some View {
HStack(spacing: 10) {
ComplicationViewCircular( headlines: MainViewModel())
VStack(alignment: .leading) {
Text("XYSS")
.font(.title)
// 1
.minimumScaleFactor(0.4)
.lineLimit(2)
.multilineTextAlignment(.leading)
HStack(spacing: 4.0) {
Spacer()
Text("at")
// 2
Text("2hrs")
//Text(appointment.date,style: .time)
}
.font(.footnote)
// 3
.complicationForeground()
}
}
.padding()
.background(
RoundedRectangle(cornerRadius: 10.0)
.stroke(lineWidth: 1.5)
.foregroundColor(Color.blue)
.complicationForeground())
}
}
struct ComplicationViewExtraLargeCircular: View {
// 1
// @State var appointment: Appointment
var body: some View {
// 2
ZStack(alignment: .center) {
// 3
Circle()
.foregroundColor(Color.blue)
ProgressView(
value: 0.5)
.progressViewStyle(ProgressArc(Color.white))
.complicationForeground()
// 4
VStack(alignment: .center,spacing: 3.0) {
// 5
Text("In 2hrx")
.font(.footnote)
.minimumScaleFactor(0.4)
.lineLimit(2)
Text("meet here")
.font(.headline)
.minimumScaleFactor(0.4)
.lineLimit(2)
Text("at this location")
.font(.footnote)
}
.multilineTextAlignment(.center)
.foregroundColor(.black)
.complicationForeground()
}
.padding([.leading,.trailing],5)
}
}
struct ComplicationViewCircular_Previews: PreviewProvider {
static var previews: some View {
// 1
Group {
// 2
CLKComplicationTemplateGraphicCircularView(
ComplicationViewCircular( headlines: MainViewModel())
// 3
).previewContext()
CLKComplicationTemplateGraphicCornerCircularView(
ComplicationViewCornerCircular(headlines: MainViewModel())
)
//.previewContext(faceColor: .red)
.previewContext()
}
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)