2014-11-22 9 views
23

Я очень рад новым возможностям взаимодействия с пользователем, представленным Apple Watch, среди которых Force Touch и Digital Crown.API WatchKit для Force Touch/Digital Crown?

Однако я не мог найти упоминания о них в API WatchKit. Есть ли способы получать события от Force Touch/Digital Crown? Возможно ли иметь пользовательские обработчики для событий?

+3

Force сенсорный просто показывает пункты меню, которые вы добавляете с addMenuItem. .. на WKInterfaceControllers. Нет никаких действий, направленных назад для силовых прикосновений. То же самое с цифровой короной. – mattyohe

ответ

10

watchOS 3 добавляет WKCrownSequencer и WKCrownDelegate, чтобы сообщить состояние цифровой короны (например, скорость вращения), а также получать уведомления, когда пользователь поворачивает головку.

Вы можете использовать кросс-секвенсор, чтобы обеспечить общий ввод для управления сценами или объектами интерфейса.

компания Apple обновила свой 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 на форумах разработчиков предложили отправить запрос функции. Я подозреваю, что мы получим доступ к API Digital Crown, как только мы сможем начать создавать собственные приложения Apple Watch в следующем году. В настоящий момент это остается существенным ограничением для ввода данных.

12

В настоящее время (Xcode 6.2 beta 3) Apple указала, что Digital Crown будет прокручивать содержимое страницы вверх и вниз в сторонних приложениях, но приложения не могут зарегистрироваться для получения уведомлений от нее или для использования в качестве устройства ввода. Похоже, что это связано с опасениями относительно задержки, приводящей к невосприимчивости или времени работы от батареи, поскольку сторонний код работает исключительно в приложении WatchKit App Extension на iPhone, и поэтому эти события должны быть отправлены в беспроводной сети вернитесь к телефону.

В приложении сторонних разработчиков можно использовать Force Touch как метод ввода. На данный момент я считаю, что единственное, что Apple рекомендовала для принудительного нажатия в любом приложении, - это отображать контекстное меню, а сторонние разработчики имеют полный доступ к этому. Вам не нужно регистрироваться, чтобы получить событие касания силы. Вы просто создаете меню в построителе интерфейса, добавляете в него пункты меню, а затем прокладываете эти пункты меню в IBActions в своем расширении WatchKit. Довольно странно не подключать меню к чему-то эквивалентному распознавателю жестов при прикосновении к силе, но когда вы его попробуете, вы просто найдете его работающим. Вполне возможно, что это будет оставаться единственным сторонним разработчиком сторонних разработчиков, которые вынуждены прикоснуться, даже после того, как у нас появится возможность создавать собственные приложения для Watch позже в 2015 году.

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 как ссылочный вывод