Использование короны часов для управления 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/
Ответ 5
В настоящее время это невозможно.
Однако, как было объявлено 27 мая, Apple представит SDK для собственных приложений для просмотра на WWDC в июне. Это позволит получить доступ к цифровой короне.
Источник: http://9to5mac.com/2015/05/27/live-blog-apple-senior-vp-of-operations-jeff-williams-interview-at-code-conference/