WatchKit API для Force Touch / Digital Crown?

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

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


person zavié    schedule 22.11.2014    source источник
comment
Force Touch просто показывает элементы меню, которые вы добавляете с помощью addMenuItem ... в WKInterfaceControllers. Для силовых касаний действие не возвращается. То же самое и с цифровой короной.   -  person mattyohe    schedule 22.11.2014


Ответы (5)


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

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

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

}
person Community    schedule 13.06.2016

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

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

Однако Apple призвала разработчиков отправлять запросы на улучшение на http://bugreporter.apple.com, чтобы это было хорошая идея сделать это и запросить доступ к этим API, поскольку некоторые из нас уже имеют.

person Duncan Babbage    schedule 11.01.2015

На данный момент нет возможности настраивать обработчики событий для любого метода ввода. Сотрудники Apple на форумах разработчиков предложили отправить запрос на добавление функции. Я подозреваю, что мы получим доступ к API Digital Crown, как только сможем начать создавать собственные приложения для Apple Watch в следующем году. На данный момент остается существенное ограничение для ввода данных.

person user3746428    schedule 24.11.2014

В watchOS 2 (включенную в бета-версию Xcode 7) Apple добавила WKInterfacePicker, чтобы вы могли регистрировать делегата и реагировать на изменения цифровой короны. Вы можете ознакомиться с документами здесь.

person thealienisreal    schedule 09.06.2015

В 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];

В построителе интерфейса свяжите элемент пользовательского интерфейса средства выбора с TestSelector в качестве ссылочного выхода

person peoe    schedule 09.06.2015