用于Force Touch / Digital Crown的WatchKit API?

我非常高兴Apple Watch引入了新的用户互动function,其中包括Force Touch和Digital Crown。

但是,我无法在WatchKit API中find它们的提及。 有没有办法接收Force Touch / Digital Crown的事件? 是否有可能为事件定制处理程序?

watchOS 3增加了WKCrownSequencerWKCrownDelegate来报告数字表冠的状态(如旋转速度),以及在用户旋转表冠时接收通知。

您可以使用琴型音序器提供一般input来控制场景或界面对象。

苹果公司已经更新了他们的WatchKit目录示例代码 ,包括一个WKInterfaceController皇冠顺序器示例演示如何使用Apple Watch数字皇冠与​​其他对象进行交互:

 class CrownDetailController: WKInterfaceController, WKCrownDelegate { @IBOutlet var velocityLabel: WKInterfaceLabel! @IBOutlet var stateLabel: WKInterfaceLabel! @IBOutlet var pickerView: WKInterfacePicker! override func awake(withContext context: AnyObject?) { super.awake(withContext: context) let itemList: [(String, String)] = [ ("Item 1", "Red"), ("Item 2", "Green"), ("Item 3", "Blue") ] let pickerItems: [WKPickerItem] = itemList.map { let pickerItem = WKPickerItem() pickerItem.caption = $0.0 pickerItem.title = $0.1 return pickerItem } pickerView.setItems(pickerItems) crownSequencer.delegate = self } override func willActivate() { // This method is called when watch view controller is about to be visible to user super.willActivate() crownSequencer.focus() } @IBAction func focusCrown(sender: AnyObject) { crownSequencer.focus() } func updateCrownLabels() { velocityLabel.setText(String(format: "RPS: %2.2lf", crownSequencer.rotationsPerSecond)) stateLabel.setText(crownSequencer.isIdle ? "Idle: true" : "Idle: false") } func crownDidBecomeIdle(_ crownSequencer: WKCrownSequencer?) { updateCrownLabels() } func crownDidRotate(_ crownSequencer: WKCrownSequencer?, rotationalDelta: Double) { updateCrownLabels() } } 

目前(Xcode 6.2 beta 3)苹果已经表示,数字王冠将在第三方应用程序中上下滚动页面内容,但是应用程序无法注册以接收来自其的通知或将其用作input设备。 这很可能是由于担心延迟导致无响应或电池寿命,因为第三方代码仅在iPhone上的WatchKit应用程序扩展中运行,因此这些事件必须以无线方式发送stream回电话。

在第三方应用程序中可以使用Force Touch作为input法。 在这一点上,我相信只有苹果已经build议在任何应用程序中强制触摸是显示一个上下文菜单,并且第三方开发人员可以完全访问这个。 您无需注册即可收到强制触摸事件。 您只需在界面构build器中创build一个菜单,向其中添加菜单项,然后将这些菜单项连接到WatchKit扩展中的IBAction。 没有必要将菜单连接到相当于强制触摸手势识别器的东西是相当奇怪的,但是当你尝试它时,你会发现它的工作原理。 即使在2015年晚些时候我们有能力为Watch制作本地应用程序,这也许是继续成为唯一的第三方开发者必须强制触摸的途径。

不过,苹果鼓励开发者在http://bugreporter.apple.com上提交增强请求,所以这样做是个好主意,并且要求我们已经有了一些访问这些API的机会。

目前,对于任何一种input方法都没有自定义事件处理程序的function。 开发者论坛上的苹果员工build议提交function请求。 我怀疑,明年我们可以开始创build本地Apple Watch应用程序,就可以使用Digital Crown API。 目前它仍然是数据input的重要限制。

在watchOS 2中,(包含在Xcode 7 beta中)Apple增加了WKInterfacePicker ,允许您注册一个代表并响应数字表冠更改。 你可以在这里查看文档。

在WatchOS 2中使用数字表冠在WKInterfacePicker中select一个项目:

在手表应用程序扩展InterfaceController.h

 @property (strong, nonatomic) IBOutlet WKInterfacePicker *TestSelector; @property (strong, nonatomic) NSArray *TestsArray; 

在手表应用程序扩展InterfaceController.m

 // Setup two items the user can select from in picker WKPickerItem *pickerItem1 = [WKPickerItem alloc]; [pickerItem1 setTitle:@"First item in list"]; WKPickerItem *pickerItem2 = [WKPickerItem alloc]; [pickerItem2 setTitle:@"Second item in list"]; // Add items to array that will be used to set picker list self.TestsArray = [[NSArray alloc ] initWithObjects:pickerItem1,pickerItem2, nil]; // Set list of items as choices in the picker list [TestSelector setItems:self.TestsArray]; 

在界面构build器中,将选取器UI元素链接到TestSelector作为引用出口