2014-11-22 49 views
23

我對Apple Watch引入的新用戶交互可能性感到非常興奮,其中包括Force Touch和Digital Crown。WatchKit API for Force Touch/Digital Crown?

但是,我在WatchKit API中找不到它們。有沒有辦法從Force Touch/Digital Crown收到活動?是否有可能爲事件定製處理程序?

+3

力觸只顯示菜單項,您有addMenuItem添加。 ..在WKInterfaceControllers上。沒有任何行動通過武力觸及。與數碼皇冠一樣。 – mattyohe 2014-11-22 19:23:23

回答

10

watchOS 3增加了WKCrownSequencerWKCrownDelegate來報告數字表冠的狀態(如旋轉速度),以及在用戶旋轉錶冠時接收通知。

您可以使用crown音序器提供控制場景或界面對象的通用輸入。

蘋果已經更新了他們的WatchKit Catalog sample code到包括WKInterfaceController冠序例子演示瞭如何使用Apple關注數字樹冠與其他對象進行交互:

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() 
    } 

} 
10

此刻,對於任一輸入方法都沒有自定義事件處理程序的功能。開發者論壇上的Apple員工建議提交功能請求。我懷疑我們會在明年開始創建本地Apple Watch應用程序後立即訪問Digital Crown API。目前它仍然是數據輸入的重要限制。

12

目前(Xcode 6.2 beta 3)Apple已經表示Digital Crown會在第三方應用程序中上下滾動頁面內容,但應用程序無法註冊以接收來自其的通知或將其用作輸入設備。這很可能是由於擔心延遲導致無響應或電池壽命,因爲第三方代碼僅在iPhone上的WatchKit應用程序擴展中運行,因此這些事件必須以無線方式發送流回電話。

可以在第三方應用程序中使用Force Touch作爲輸入法。在這一點上,我相信Apple在任何應用程序中建議使用的唯一用途是顯示上下文菜單,並且第三方開發人員可以完全訪問此功能。您無需註冊即可收到強制觸摸事件。您只需在界面構建器中創建一個菜單,向其中添加菜單項,然後將這些菜單項連線到WatchKit擴展中的IBActions。沒有必要將菜單連接到相當於強制觸摸手勢識別器的東西,這很奇怪,但是當您嘗試它時,您會發現它的工作原理。即使在2015年晚些時候我們有能力爲Watch開發原生應用程序後,這可能仍然是第三方開發者必須強制觸摸的唯一訪問方式。

不過,Apple已經鼓勵開發者提交增強功能請求http://bugreporter.apple.com,所以最好這樣做,並且要求我們已經擁有了一些訪問這些API的方法。

7

在watchOS 2(包含在Xcode 7測試版中)Apple增加了WKInterfacePicker以允許您註冊代表並響應數字表冠變更。您可以查看文檔here

4

在WatchOS 2以使用數字冠來選擇在WKInterfacePicker中的項目:

在鐘錶應用信息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]; 

在界面構建器中,將選取器UI元素鏈接到TestSelector作爲參照插座