问题标签 [apple-watch-complication]

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 投票
1 回答
2100 浏览

watchkit - watchOS - 显示并发症的实时出发数据

我有一个公共交通应用程序,其中包含火车的实时出发数据。我想添加一个复杂功能,显示下一班火车的出发时间。

是否可以显示(或刷新)并发症的实时数据?例如,显示“3 min. to station X”。根据来自公共交通 API 的信息,数据每分钟都会发生变化。

我应该如何在 watchOS 2 或 watchOS 3 上完成这项工作?

我知道 ETA 应用程序会显示复杂的旅行时间,但我不确定它们是如何实现的。

0 投票
1 回答
1060 浏览

ios - 如果在执行期间未隐藏钟面,Apple Watch ClockKit Complications 不会更新其时间线条目

有没有其他人注意到并发症条目没有正确更新的问题。我刚刚为我的应用程序添加了一些初始支持,但注意到它们没有显示我期望它们显示的内容。例如,为了方便快速测试这个问题,我会创建一个时间线

然而,我所看到的只是并发症条目 A 停留在 B 和 C 应该显示的时间之后。

我的普通应用程序本身并没有设置为像这样创建定期间隔的并发症,它具有可以由用户设置的计时器的许多方面,但其中一个方面只是允许用户一次启动多个计时器,这一切将在他们选择的用户定义的持续时间后完成。与 iOS 时钟应用程序的计时器不同,您可以以秒为单位指定计时器持续时间,因此 2 个计时器完全有可能在几秒钟内完成,但总体而言,它们更有可能相隔几分钟。此外,不应该添加太多的复杂条目,尽管我的应用程序的其他更复杂的方面可以轻松添加 10 甚至 100 个复杂条目,具体取决于用户在其中设置的任务的复杂程度。不过就目前而言,

我将 Xcode 更新到了最新版本(7.3.2),没有任何改进,并将构建发送到我的实际手机和手表,同样没有改进。直到它确实起作用了。在进一步的调试中,我发现我可以通过简单地降低我的手表(关闭屏幕)然后再次唤醒它来使时间线自动运行,而这一切都是在它正在执行我的时间线的过程中进行的。完成此操作后,时间线将从那时起正常工作。

我创建了一个测试应用程序来演示该问题,它确实完全重现了该问题,因此我将在错误报告中将其发送给苹果。只是想看看有没有其他人注意到这个问题。

此外,当我的测试应用程序执行时,我得到以下日志输出,其中包含一个没有意义的错误

该日志的相关信息如下

您可以在最后的系统错误中看到它使用22:08:46的开始日期,这实际上是我告诉 Clockkit 的是我的时间线的 endDate,而不是startDate。我不确定这是否与我看到的行为有关,因为我在隐藏/显示屏幕后看到相同的错误。

我在我的在线测试应用程序中放了一段关于这种行为的视频。此测试应用程序的详细信息如下

应该在相关模拟器中运行的完整代码在这里可用,相关的复杂模块也在这里列出以供参考。

在我的扩展委托中,我从 iOS 应用程序接收 userInfo 并安排重新加载我的并发症时间线

ExtensionDelegate.m

然后在我的 ComplicationController 中有以下方法来处理事情的复杂性

并发症控制器.m

也许你可以看看你自己的应用程序是否有同样的问题。

我不认为我做错了什么,没有什么会导致这种奇怪的行为,对我来说就像一个错误。不幸的是,它破坏了我的应用程序,该应用程序在某些情况下可以使用非常小的时间线条目,如果用户注意并在测试时保持手表屏幕打开,我宁愿不让它们不起作用。

谢谢你的时间,

干杯

0 投票
1 回答
313 浏览

swift - watchOS - 复杂功能显示以前的条目

我正在创建一个 watchOS 3 复杂功能,显示公共交通服务的出发时间。我创建了一个带有数组的数据模型,该数组包含Train带有stationName(字符串)和departureTime(NSDate)的对象。

我已经实现了 getCurrentTimelineEntry() 方法,并且条目显示在手表上。问题是手表只显示上一个条目。例如,我有以下出发时间:

如果当前时间为 14:10,则手表上仍显示第一个条目(时间为 14:00)。直到当前时间是 14:30,才会显示该条目。如果当前时间是 14:10,我想在手表上查看 14:30 的出发时间。

任何人都可以帮助我或指出正确的方向吗?

0 投票
1 回答
4076 浏览

swift - 使用 Swift 3 和后台任务更新复杂性

对于 watchOS 3,Apple 建议使用WKRefreshBackgroundTask而不是使用getNextRequestedUpdateDate.

如何使用新方法确定两次更新之间的时间?

我只会将我的数据请求(来自 url)侵入getCurrentTimelineEntry并更新复杂性,但我认为这并不是 Apple 真正推荐的。

一个简短的代码示例将是一个很大的帮助。

0 投票
1 回答
1986 浏览

watchkit - reloadTimeline() 不会更新并发症

我正在尝试制作一个 watchOS 3 应用程序,并且我想在后台任务中更新我的并发症。

首先,我在后台任务中从服务器获取新数据handle()。之后,我通过调用来更新我的活跃并发症complicationServer.reloadTimeline(for:)

在控制台中,我确实看到了消息“UPDATE COMPLICATION”,因此代码被执行。

然而重新加载后,并发症仍然显示旧数据。如果我切换表盘并切换回来,那么复杂功能有时会重新加载。我是否必须做其他事情才能从后台任务重新加载并发症?

0 投票
1 回答
465 浏览

ios - 什么时候调用 getPlaceholderTemplateForComplication() 方法?

我正在尝试为 WatchOS 应用程序构建一个简单的复杂模板,但我一直试图了解何时调用ComplicationController该类的方法。getPlaceholderTemplateForComplication()

苹果的文件说

当您的应用首次启动时,ClockKit 会调用此方法,

但如果我运行模拟器,它通常不会触发。

关闭并重新打开“在 Apple Watch 上显示应用程序”无济于事。

什么时候getPlaceholderTemplateForComplication()调用方法?

0 投票
2 回答
1161 浏览

xcode - 无法访问 WatchKit 应用资产

我需要在我的 WatchOS 应用程序及其复杂性中使用一些图像。如果我将它们放在 watchkit 应用程序目标组内的资产目录中,我无法从我的 WatchOS 应用程序访问它们,但我可以在扩展资产目录中访问它们。

这是测试图像: CircularSmallRingImage42mm@2x.png

这就是我测试可访问性的方式:

  • 我将一个 png 文件放入 watchkit 应用程序资产中。XCode 创建了一个图像集广告,将图像放在 2x 插槽中。
  • CircularSmallRingImage42mm我从属性检查器复制了名称。
  • awakeWithContext()我在初始的方法中添加了以下代码InterfaceController

    /li>
  • 我在 Apple Watch 模拟器上重置了内容和设置。

  • 我在 iPhone 6s Plus + Apple Watch 42mm 模拟器上清理并运行了 watchkit 应用程序方案。不工作。
  • 我删除了图像集并重复了该过程,但这次我将图像放在了应用程序扩展的资产目录中。作品。

我的 watchkit 应用组中的资产目录仅针对 watchkit 应用。我的 watchkit 应用扩展组中的资产目录仅针对 watchkit 应用扩展。在我所见的任何地方,人们似乎都建议将静态内容放入与 Watch App 目标捆绑的资产目录中,以便将其存储在手表本身上。

为什么我无法访问图像?难道我做错了什么?watchkit 应用程序包不是存储静态文件的推荐位置吗?

0 投票
1 回答
224 浏览

ios - WatchOS 并发症:是否可以使用自定义文本对齐方式?

我一直在为我的应用程序开发 watchOS 2 复杂功能。它看起来很棒......除了我想调整的最后一件事。

复杂模板似乎提供了不是我想要的文本对齐方式。出于这个问题的目的,让我们使用以下代码:

现在,看看复杂性,第一行居中对齐,而第二行左对齐。我知道这没什么大不了的,但我真的希望两条线都居中对齐……这会让我的并发症看起来好多了!

我一直在查看 API 文档并搜索网络,但我看不到这样做的方法(或任何其他试图做同样事情的人)。

问题:

  • 有没有其他人遇到同样的问题?
  • 我错过的 API 中有什么东西可以让你这样做吗?
  • 如果没有,是否有任何更hacky/钝的方式来实现我想要的?
0 投票
2 回答
488 浏览

watchkit - 对于 Watch Complication 和 Time Travel,getTimelineEntriesForComplication 经常被(太)调用

从下面的数据来看,ClockKit 生成了CLKComplicationTimelineEntry一次未来的项目,但是对于过去的时间点,进行了 24 次调用!为什么是这样?

更多细节:

我注意到我的 Apple Watch 并发症中有一种奇怪的行为。

它支持时间旅行——我提供过去 1 天、未来 4 天的数据。我目前正努力成为一个好公民,减少重新生成并发症数据的调用。

为了了解某些调用的频率,我print在两者中都放了一个简单的getTimelineEntries(for:before:limit:withHandler:)getTimelineEntries(for:after:limit:withHandler:)输出before/after参数。

当我在模拟器中启动 App/Complication 时,我得到以下输出:

0 投票
0 回答
108 浏览

ios - 消失的 watchOS 并发症

我花了一些时间研究如何制作我的第一个 watchOS Complication。起初我根本无法让它发挥作用,我不断尝试,最终得到了一些结果。但是,我的复杂功能仅在短时间内起作用,然后将自身重置为默认占位符。

苹果手表截图 1 Apple Watch 截图 2. 通知有 2 个动作 苹果手表截图 3。 苹果手表截图 4。

第一个屏幕截图显示了当您强制触摸表盘时会发生什么。第二个是按下 command + shift + H 后的一个非常短暂的时刻。第三个屏幕截图显示默认占位符,并显示以下日志消息:

扩展收到唤醒复杂功能支持的请求。

最后一个屏幕截图是当您滚动浏览并发症列表时。

我正在使用标准ComplicationController.swift模板。我唯一定制的是这种方法:

iOS 应用是在 Objective-C 和 Apple Watch 应用和扩展——Swift 上编写的。

如果您无法使复杂功能发挥作用,请查看此列表。

  1. 数据源类需要$(PRODUCT_MODULE_NAME).前缀。看看下面的 Xcode 截图。
  2. 仅针对您支持的并发症启用受支持的家庭。
  3. 项目 > 构建设置 > 打包 > 定义模块应设置为YES.
  4. 项目 > 构建设置 > 搜索路径 > 始终搜索用户路径应设置为NO.
  5. 确保类ComplicationController符合CLKComplicationDataSource协议。由于某种原因,我的模板没有它。
  6. 您的并发症图像需要具有正确的尺寸。
  7. 仅在运行项目之前选择绿色的 Complication 目标。
  8. 重置两个模拟器的内容和设置。

Xcode 截图

我错过了什么?为什么我的 Complication 在模拟器中消失了,并且根本没有出现在真实硬件上?