问题标签 [clockkit]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
418 浏览

watchkit - 我可以同时使用具有自定义背景图像和复杂功能的 ClockKit 吗?

我想使用带有自定义图像的表盘(如 WWCD'15 主题演讲中所示),同时显示复杂性。我怎样才能做到这一点?

我研究了ClockKit 文档,但找不到这样做的方法。

更新:似乎watchOS 2提供了带有自定义图像的表盘。但是,此表盘不允许添加复杂功能。

0 投票
1 回答
1358 浏览

objective-c - 如何使用 Objective C 填充 getPlaceholderTemplateForComplication?

所以这里的教程非常好

http://www.sneakycrab.com/blog/2015/6/10/writing-your-own-watchkit-complications

这告诉我我需要设置 fillFraction、ringStyle 和 textProvider,但它并没有从文档中跳出我需要在目标 c 中做的事情,而且我尝试了许多我能想到的组合。谁能帮助我理解完成新 watchOS 复杂模板中的样板代码?

我想通过我的 ios 应用程序的更新来测试一个小的循环并发症。

在我全力以赴之前,有人帮助我理解吗?

非常感谢尼克

在与@mipadi 简短交谈后更新 :-) 和一个小调整。

0 投票
2 回答
899 浏览

swift - 你能从 CLKRelativeDateTextProvider 中提取文本吗?

我正在构建一组并发症,并来到了只有一个 textProvider 的 CLKComplicationTemplateUtilitarianLargeFlat。

我想显示一些文本以及相对日期。所以我试着这样做:

但我得到的只是:

您可以从 CLKRelativeDateTextProvider 中提取原始文本或以某种方式将其与 CLKSimpleTextProvider 结合吗?

0 投票
2 回答
3205 浏览

apple-watch - 使数据复杂化:未调用 ExtensionDelegate

(看起来其他人在前几周遇到过这个问题,但我没有找到任何解决方案。)

我正在尝试做一件非常基本的事情:从我的 iOS 应用程序或我的 Watch 应用程序获取数据到我的复杂控制器。

事实证明,我做这件事的能力比我想象的要差。watchOS 2 过渡指南表明我应该使用以下代码“从扩展委托中获取所需的数据”:

伟大的。除了,我无法弄清楚如何让它在扩展方面工作。尽管更重要的是,我似乎根本无法从复杂控制器启动中运行扩展委托代码。当我运行复杂功能时,我收到以下消息:“扩展收到唤醒复杂功能支持的请求。” 但是,任何扩展委托的方法中的代码似乎都没有运行。我还在每个方法中设置了断点,并且没有一个断点被命中。

看起来“transferCurrentComplicationUserInfo:”也被建议用于复杂功能更新,尽管目前还不清楚它是如何使用的。据我所知,它用于唤醒手表扩展,以便 ExtensionDelegate 可以存储新数据以供下次复杂控制器运行时使用,但由于上一个问题,我无法确认。

我有一个可能的解决方法(从复杂控制器 ping 服务器并希望会话变量持续存在,以便我可以发送相关数据),但是如果我不能解决这个问题,我的复杂工作很有可能会被淹没。这里的任何帮助都是巨大的。

顺便说一句,这是我为“getCurrentTimelineEntryForComplication”提供的代码,如果这有帮助的话。

0 投票
1 回答
2267 浏览

ios - 强制重新加载 watchOS 2 并发症

我在让并发症工作时遇到问题。如果我能够可靠地刷新它们会很有帮助。

因此,我将强制按下菜单按钮链接到以下方法

不幸的是,这会导致应用程序崩溃。带一个fatal error: unexpectedly found nil while unwrapping an Optional value

我知道电话reloadTimelineForComplication(complication)是有预算的,但这不是问题,因为它从一开始就不起作用。

我目前正在使用 watchOS2 + Xcode 7 GM

我很感激有关在应用程序运行时刷新 Complications 的任何想法?

0 投票
2 回答
8151 浏览

ios - 何时何地获取手表复杂功能的数据

在处理了几天的并发症后,我有信心对按规定时间间隔发生的更新的更新过程说以下内容:

  • 系统调用requestedUpdateDidBegin()
    • 您可以在此处确定您的数据是否已更改。如果没有,您的应用程序无需执行任何操作。如果您的数据已更改,您需要致电:
      • reloadTimelineForComplication如果您的所有数据都需要重置。
      • extendTimelineForComplication如果您只需要在并发症时间线的末尾添加新项目。
    • 注意:系统实际上可能会调用requestedUpdateBudgetExhausted(),而不是requestedUpdateDidBegin()如果您在当天花费了过多的并发症时间预算。这就是这个问题的原因。
  • 如果您调用reloadTimelineForComplication,系统将调用getCurrentTimelineEntryForComplication(以及获取数组的未来和过去变体,具体取决于您的时间旅行设置)
  • 这是猜想,因为我还没有测试它,但我相信如果你调用extendTimelineForComplication它,只会getTimelineEntriesForComplication(... afterDate date: NSDate ...)调用它。
  • 然后系统将调用getNextRequestedUpdateDateWithHandler,以便您可以指定您的并发症需要多长时间才能进行新的更新。

Apple 的文档非常清楚,您不应该过于频繁地要求更新,或者在并发症代码中进行过多的处理,否则您将耗尽您的时间预算,您的并发症将停止更新。所以,我的问题是:您在何时何地进行更新?

对于上下文,我的场景是一个 URL,其返回数据每小时最多更改两次。

放置 URL 获取代码最明显的地方是func requestedUpdateDidBegin()获取数据,存储它,如果没有变化,就返回。如果有更改,则延长或重新加载时间线。

但是,获取 URL 的成本可能很高。备择方案:

  • 将代码放在手机应用程序上并使用 发送WCSession,但如果用户关闭该应用程序,则更新将不再发生。
  • 使用推送更新,但这不是网络应用程序,所以我没有地方可以发送它们。
  • 显然,当用户与手表应用程序交互时,我会更新所有数据,但这意味着它仅在用户使用应用程序时才会更新,这消除了对复杂性的需求。

还有其他地方吗?我可以在手表应用程序中设置不属于复杂功能的周期性功能吗?获取复杂功能更新数据的正确位置在哪里?

0 投票
1 回答
1662 浏览

ios - transferCurrentComplicationUserInfo 和 ComplicationController

我希望将数据发送到我的并发症,作为didReceiveRemoteNotification更新显示数据的一部分,但 Apple 似乎很少有文档说明如何设置这与并发症本身之间的关系。

创建aComplicationController后,我是否也应该创建 aWCSession并开始监听委托调用?我设法将它放入getPlaceholderTemplateForComplication其中,这似乎在 iOS 应用程序运行时有效,但应用程序被终止(或不再运行)时无效。

我很好奇是否有人有一个很好的指南,可以在 iOS 应用程序运行或不运行时将数据作为远程 JSON 推送通知的一部分获取到手表。

0 投票
1 回答
224 浏览

ios - ClockKit CLKComplicationDataSource 缺少后向事件

我编写了一个支持并发症的测试应用程序

出于某种原因,钟面仅显示 1-2 个向后事件,但我可以在日志中看到当前日期之前的 10-15 个事件。当我为前向事件返回一个空数组时,我所有的后向事件都开始显示在钟面上。

这是我的功能

PS我知道'limit'参数并且它总是大于我的数组的计数

PPS 对不起我的英语:)

0 投票
2 回答
7789 浏览

apple-watch - Apple Watch 的复杂功能数据更新流程是怎样的?

我一直在互联网上关注很多教程来学习如何设置并发症。按预期设置并发症我没有问题。

直到初始时间线条目过期。12 小时后,我不知道如何更新它以保持并发症的存在。我将在下面分享我拥有的所有内容,希望有人可以帮助我填写。

在这里,我为要在复杂功能上显示的数据创建变量。

以下数组是此数据的容器。

这允许在手表锁定时显示复杂功能。

这允许在复杂功能上进行时间旅行。

在这里,我将时间线的开始时间设置为等于现在。

在这里,我将时间线的结束时间设置为从现在开始的 12 小时。

在这里,我创建了并发症的模板。这是为了在用户浏览手表上的所有并发症时看到我的并发症时向他们显示示例数据。

这为并发症创建了第一个时间线条目。启用复杂功能后,将运行此代码并立即相应地填充复杂功能。

这是我为我目前拥有的所有数据创建时间线条目的地方。

这告诉手表何时更新并发症数据。

这是我遇到问题的地方。

如何创建新数据并重新加载时间线?什么是流量?我不是要延长时间线,而是要完全取代它。我完全不知所措。在这一点上,Apple 的文档非常模糊。我知道我需要实现以下方法,但我不知道如何。有人可以帮我填写此代码吗?

更新:

多亏了 El Tea,我才开始工作。我需要将 CLKComplicationServer 的实例添加到 requestedUpdateDidBegin 并将 reloadTimeline 方法放入其中。

这是更新的代码:

0 投票
2 回答
1805 浏览

apple-watch - 使用 IOS 数据更新 WatchOS2 ClockKit 复杂功能

我正在尝试使用通过 WatchConnectivity 从 IOS / iPhone 传输的数据来更新 watchOS2 时钟套件复杂功能。

尽管进行了相当多的研究,但到目前为止还没有成功。我发现虽然其他帖子描述了类似的挑战(还没有解决方案)

我面临3个问题:

1)来自 ComplicationController 的 sendMessage 似乎没有唤醒 IOS 父应用程序(而从 InterfaceController 发送的相同 sendMessage 确实唤醒了 IOS 父应用程序)

2)即使将值传输到 ComplicationController(通过 sendUserInfoToComplication 并且当 IOS 应用程序处于前台时),显示在复杂功能中的值有时也会更新(尚未找到为什么有时会/有时不会的模式)

3)我将“getNextRequestUpdate..”设置为 2 分钟(用于测试目的)。不过,这似乎没有任何区别。(即使在模拟器中也可以在任意时间触发,但没有使用“预算”/我设置了停止器来验证)

请注意,我对 IOS / Swift 编程比较陌生。但我看到,基于其他问题/帖子,我似乎并不是唯一一个为此苦苦挣扎的人。

这里是示例代码:

并发症控制器

视图控制器

此外,在运行模拟器时,我会收到大量与以下类似的消息: