Использование короны часов для управления WKInterfaceSlider

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

Если да, то как?

Apple использует его для изменения цветов в пользовательском интерфейсе часов.

EDIT:, поэтому на данный момент это кажется невозможным (см. ответы ниже). Важно заметить, что через две недели (Apple WWDC 2015) это может измениться (возможно, Watch OS для независимых приложений?)

Ответ 1

Невозможно. У вас нет короны в управлении - она ​​используется только автоматически для прокрутки и т.д.

Рекомендации Apple:

"Прокрутка - это единственное поддерживающее взаимодействие Digital Crown для приложений, и система автоматически управляет этими взаимодействиями для вас. Приложения не имеют прямого доступа к цифровой короне".

https://developer.apple.com/watch/human-interface-guidelines/

Apple может включить цифровую крону, когда внешние приложения Apple Watch отсутствуют (мы увидим через 2 недели в WWDC).

Ответ 2

Так как watchOS 2 beta вы можете использовать цифровую корону с WKInterfacePicker!

Чтобы использовать цифровую корону в комбинации с WKInterfaceSlider, вам нужно сделать небольшое обходное решение:

  • добавьте WKInterfacePicker в свой интерфейсный контроллер и установите его высоту в 0, чтобы скрыть его от пользователя (он не будет доступен, если вы установите "hidden" в true)
  • сгенерируйте массив с количеством шагов вашего слайдера, например:

    items = [WKPickerItem](count: numberOfSteps, repeatedValue: WKPickerItem())
    picker.setItems(items)
  • вызов picker.focus() для получения ввода цифровой кроны

  • добавьте действие вашему сборщику, задающее значение ползунка, например:

    @IBAction func pickerChanged(value: Int) {
        slider.setValue(Float(value + 1))
    }

Ответ 3

Все ответы устарели.

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

class SliderInterfaceController: WKInterfaceController {
    @IBOutlet var slider: WKInterfaceSlider!

    let minVal: Float = 0
    let maxVal: Float = 10

    var selectedVal: Float = 0

    override func awake(withContext context: Any?) {
        super.awake(withContext: context)

        // The sequencer should be focused to receive events
        crownSequencer.focus()
        crownSequencer.delegate = self
    }

    @IBAction func sliderAction(_ value: Float) {
        selectedVal = value
    }
}

// MARK: WKCrownDelegate
extension SliderInterfaceController: WKCrownDelegate {
    func crownDidRotate(_ crownSequencer: WKCrownSequencer?, rotationalDelta: Double) {
        // 1 divided by number of rotations required to change the value from min to max 
        let rotationToValRatio = 0.25 * Double(maxVal - minVal)

        let newVal = selectedVal + rotationalDelta * rotationToValRatio

        let trimmedNewVal = max(minVal, min(newVal, maxVal))

        slider.setValue(Float(trimmedNewVal))
        selectedVal = trimmedNewVal
    }
}

Ответ 4

Как и ps4, это просто невозможно.

Поскольку Apple заявляет в руководстве по дизайну часов:

"Прокрутка - это единственное поддерживающее взаимодействие Digital Crown для приложений, и система автоматически управляет этими взаимодействиями для вас. Приложения не имеют прямого доступа к цифровой короне".

https://developer.apple.com/watch/human-interface-guidelines/