天道酬勤,学无止境

apple-watch-complication

watchOS - Complication shows previous entry

I'm creating a watchOS 3 complication that shows departure times from a public transit service. I've created a data model with an array that contains Train objects with a stationName (String) and departureTime (NSDate). I've implemented the getCurrentTimelineEntry() method and the entries are showing on the watch. The problem is that the watch shows only the previous entry. For example, I've the following departure times: Train(startStation: "Station name", endStation: "Station name", departureTime: stringToDate(dateString: "2016-06-20 14:00")), Train(startStation: "Station name", endStation:

2021-10-12 12:18:42    分类:问答    swift   watchkit   apple-watch-complication   clockkit   watchos-3

Setting tintColor for Apple Watch complication

I am trying to set the header text color for a Modular Large complication. I have already customized the watch face to use Multicolor. However, when I build and run this code, the header text color is still white (which is the default). Why isn't the color updating? private func templateForClassModularLarge(className: Schedule) -> CLKComplicationTemplateModularLargeStandardBody { let template = CLKComplicationTemplateModularLargeStandardBody() let headerTextProvider = CLKSimpleTextProvider(text: "My Schedule", shortText: "Schedule") headerTextProvider.tintColor = UIColor(red: 101, green: 153

2021-10-11 09:36:19    分类:问答    swift   watchos   apple-watch-complication   clockkit

ClockKit CLKComplicationDataSource 缺少向后事件(ClockKit CLKComplicationDataSource missing backward events)

问题 我编写了一个带有并发症支持的测试应用程序 出于某种原因,钟面仅显示 1-2 个向后事件,但我可以在当前日期之前的日志中看到 10-15 个事件。 当我为前向事件返回一个空数组时,我所有的后向事件都开始显示在钟面上。 这是我的功能 func getTimelineEntriesForComplication(complication: CLKComplication, beforeDate date: NSDate, limit: Int, withHandler handler: (([CLKComplicationTimelineEntry]?) -> Void)) { var entries: [CLKComplicationTimelineEntry] = [] let events = self.events.filter { (event: CEEvent) -> Bool in return date.compare(event.startDate) == .OrderedDescending } var lastDate = date.midnightDate for event in events { let entry = CLKComplicationTimelineEntry(date: lastDate, complicationTemplate

2021-10-10 15:44:33    分类:技术分享    ios   apple-watch   apple-watch-complication   time-travel   clockkit

ClockKit CLKComplicationDataSource missing backward events

I write a test app with complications support For some reason clock faces presenting only 1-2 backward events, but I can see in logs 10-15 events before current date. And when I return an empty array for forward events all my backward events start showing in clock face. Here is my function func getTimelineEntriesForComplication(complication: CLKComplication, beforeDate date: NSDate, limit: Int, withHandler handler: (([CLKComplicationTimelineEntry]?) -> Void)) { var entries: [CLKComplicationTimelineEntry] = [] let events = self.events.filter { (event: CEEvent) -> Bool in return date.compare

2021-10-10 15:15:37    分类:问答    ios   apple-watch   apple-watch-complication   time-travel   clockkit

使用 Swift 3 和后台任务更新复杂性(Updating complication with Swift 3 and background task)

问题 对于watchOS 3,苹果建议更新与并发症WKRefreshBackgroundTask而不是使用getNextRequestedUpdateDate 。 如何使用新方法确定两次更新之间的时间? 我只会将我的数据请求(从 url)破解到getCurrentTimelineEntry并更新复杂性,但我认为这并不是 Apple 真正推荐的。 一个简短的代码示例将是一个很大的帮助。 回答1 我通常在不同的答案中对此进行了介绍,但我将在此处解决您的具体问题。 你是对的,你不应该破解复杂控制器来做任何(异步)获取。 数据源应该只负责按照复杂服务器的要求返回现有的数据。 这对于 watchOS 2 是正确的,在 watchOS 3 中仍然如此。 对于 watchOS 3,每次后台刷新都可以安排下一次。 流程概览: 在您的特定情况下,您可以等到WKURLSessionRefreshBackgroundTask任务完成下载。 此时,在完成现有后台任务之前安排下一次后台刷新。 届时,您的扩展程序将再次被唤醒以再次启动整个后台进程: 从您的网络服务请求新数据处理回复并更新您的数据存储告诉复杂程序自行更新(这将使用手头的新数据)。 更新码头快照安排即将到来的后台刷新任务将您当前的任务标记为已完成。 您甚至可以链接一系列不同的后台子任务,其中每个子任务处理刷新周期的一个单独方面

2021-10-07 16:18:46    分类:技术分享    swift   swift3   apple-watch-complication   watchos-3   wkrefreshbackgroundtask

结合 WatchConnectivity 和复杂功能(Combining WatchConnectivity and Complications)

问题 我希望我的复杂功能通过 Watch Connectivity 从 iPhone 获取数据。 我正在使用sendMessage即时消息技术。 当我尝试获取数据时,我不希望我的 iPhone 应用程序打开,因此这需要在后台运行。 在我的 iPhone 上的 ViewController 中: import UIKit import WatchConnectivity class ViewController: UIViewController, WCSessionDelegate { var session: WCSession! override func viewDidLoad() { super.viewDidLoad() if WCSession.isSupported() { self.session = WCSession.defaultSession() self.session.delegate = self self.session.activateSession() } } func session(session: WCSession, didReceiveMessage message: [String : AnyObject], replyHandler: ([String : AnyObject]) -> Void) { if message

2021-10-07 03:55:35    分类:技术分享    swift   watchos-2   watchconnectivity   apple-watch-complication   wcsession

Watchkit 并发症和位置更新?(Watchkit Complication and location updates?)

问题 我正在尝试编写一个使用位置数据的复杂功能。 我可以在复杂控制器中获取位置数据,但由于结果异步返回,它似乎永远无法正常工作。 使用特定于位置的数据更新复杂功能的最佳方法是什么? 我认为在并发症中获取位置不是一个好主意(即使你可以)。 回答1 您应该在复杂数据源需要位置数据之前检索和缓存位置数据。 数据源类的工作是尽快为 ClockKit 提供任何请求的数据。 数据源方法的实现应该是最少的。 不要使用您的数据源方法从网络获取数据、计算值或做任何可能会延迟数据交付的事情。 如果您需要为您的复杂功能获取或计算数据,请在您的 iOS 应用程序或 WatchKit 扩展的其他部分执行此操作,并将数据缓存在您的复杂功能数据源可以访问它的位置。 您的数据源方法唯一应该做的就是获取缓存的数据并将其放入 ClockKit 所需的格式。 您可以在手机上检索位置数据,然后使用手表连接会话将transferCurrentComplicationUserInfo到您的分机委托。 扩展委托可以缓存复杂控制器的信息,或使用新数据扩展复杂时间线。

2021-10-07 00:19:20    分类:技术分享    watchkit   watchos-2   apple-watch-complication

Watchkit Complication and location updates?

I'm trying to write a complication that uses location data. I can get the location data in the complication controller but it never seems to work properly due to the results coming back asynchronously. What is the best way to update a complication with location specific data? I'm thinking that it's not a good idea to get the location in the complication (even though you can).

2021-10-03 04:48:30    分类:问答    watchkit   watchos-2   apple-watch-complication

Apple Watch 复杂功能未在后台更新(Apple Watch Complication not updating in background)

问题 我有一个 Apple Watch 并发症,它可以正确初始化并显示我期望的数据。 但是,当我的 getNextRequestedUpdateDateWithHandler 方法中返回的 NSDate 触发刷新时,我的委托中唯一被再次调用的方法是 getNextRequestedUpdateDateWithHandler 方法(我在每个方法上设置断点来确定这一点)。 我本来希望在请求的更新日期发生时调用 requestsUpdateDidBegin,但情况似乎并非如此。 有谁知道是什么原因造成的? 这是我的代码: class ComplicationController: NSObject, CLKComplicationDataSource { /// Provide the time travel directions your complication supports (forward, backward, both, or none). func getSupportedTimeTravelDirectionsForComplication(complication: CLKComplication, withHandler handler: (CLKComplicationTimeTravelDirections) -> Void) { handler(

2021-09-30 02:18:27    分类:技术分享    watchos-2   apple-watch-complication   clockkit

启动应用程序的 WatchOS3 并发症(WatchOS3 Complication that launches App)

问题 我想为 watchOS 3 创建一个复杂功能,它只会启动我的应用程序。 我使用 XCode 来创建 ComplicationController: class ComplicationController: NSObject, CLKComplicationDataSource { // MARK: - Timeline Configuration func getSupportedTimeTravelDirections(for complication: CLKComplication, withHandler handler: @escaping (CLKComplicationTimeTravelDirections) -> Void) { handler([.forward, .backward]) } func getTimelineStartDate(for complication: CLKComplication, withHandler handler: @escaping (Date?) -> Void) { handler(nil) } func getTimelineEndDate(for complication: CLKComplication, withHandler handler: @escaping (Date?) -> Void) {

2021-06-25 08:30:21    分类:技术分享    swift   watchkit   launch   apple-watch-complication   watchos-3