适用于Force Touch/Digital Crown的WatchKit API?

zav*_*vié 26 user-interaction ios apple-watch watchkit

我对Apple Watch引入的新用户交互可能性感到非常兴奋,其中包括Force Touch和Digital Crown.

但是,我在WatchKit API中找不到它们.有没有办法接收Force Touch/Digital Crown的活动?是否可以为事件提供自定义处理程序?

小智 14

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

您可以使用表冠序列器来提供控制场景或界面对象的常规输入.

Apple已更新其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()
    }

}
Run Code Online (Sandbox Code Playgroud)


Dun*_*age 12

目前(Xcode 6.2 beta 3)Apple表示Digital Crown会在第三方应用程序中上下滚动页面内容,但应用程序无法注册接收来自它的通知或将其用作输入设备.由于第三方代码仅在iPhone上的WatchKit App Extension中运行,因此担心延迟会导致无响应或电池寿命,这很可能是因为这些事件必须通过无线方式发送流回电话.

可以在第三方应用中使用Force Touch作为输入法.在这一点上,我相信Apple在任何应用程序中建议强制触摸的唯一用途是显示上下文菜单,第三方开发人员可以完全访问它.您无需注册即可接收强制触摸事件.您只需在界面构建器中创建一个菜单,向其中添加菜单项,然后将这些菜单项连接到WatchKit Extension中的IBActions.将菜单连接到与强制触摸手势识别器相当的东西是相当奇怪的,但是当你尝试它时,你会发现它有效.即使我们有能力在2015年晚些时候为Watch制作本机应用程序,这很可能仍然是第三方开发人员必须强制接触的唯一访问权限.

然而,Apple鼓励开发人员在http://bugreporter.apple.com上提交增强请求,因此这样做是个好主意,并要求访问这些API,因为我们已有许多API.


use*_*428 10

目前,任何一种输入法都无法使用自定义事件处理程序.开发者论坛上的Apple员工建议提交功能请求.我怀疑一旦我们明年开始创建原生Apple Watch应用程序,我们就可以访问Digital Crown API.目前,它仍然是数据输入的重要限制.


the*_*eal 7

在watchOS 2中,(包含在Xcode 7测试版中)Apple添加WKInterfacePicker了允许您注册代表并响应数字皇冠更改.你可以在这里查看文档.