Подтвердить что ты не робот

API WatchKit для Force Touch/Digital Crown?

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

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

4b9b3361

Ответ 1

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

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

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

}

Ответ 2

В настоящее время (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-интерфейсам, как уже было у нас.

Ответ 3

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

Ответ 4

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

Ответ 5

В 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 как ссылку на выход