我一直在研究制作Apple Watch应用程序,但我在获取Digital Crown的价值方面遇到了一些麻烦。我查看了WKCrownSequencer,但不确定如何处理它。有人可以告诉我如何获得一个值为1-10的变量,当你转动数字冠时它会改变。谢谢!
答案 0 :(得分:0)
在WatchOS3之后,可以获得Digital Crown的价值。查看this documentation on Apple.
基本上您需要在View Controller中使用WKCrownDelegate。示例代码将是这样的:
- (void)willActivate {
[super willActivate];
self.crownSequencer.delegate = self;
[self.crownSequencer focus];
}
- (void)crownDidRotate:(WKCrownSequencer *)crownSequencer rotationalDelta:(double)rotationalDelta {
self.totalDelta = self.totalDelta + rotationalDelta;
[self updateLabel];
}
- (void)updateLabel {
[self.label setText:[NSString stringWithFormat:@"%f", self.totalDelta]];
}
值1.0表示表冠完全旋转。
注意:请不要直接使用此代码,这只是一个例子。首先查看Apple网站上的文档。
答案 1 :(得分:0)
您需要将InterfaceController
子类符合WKCrownDelegate
并实施crownDidRotate
方法。
如果您希望您的值介于1和10之间,您只需要实现一些简单的逻辑来检查添加rotationalDelta
时的值是什么,以及它是否超出范围1- 10,将值映射到1或10,具体取决于新值将超过的方向。我假设您希望value
为Int
,如果没有,只需删除rotationalDelta
到Int
的转换,value
将为Double
请注意,rotationalDelta
1.0代表表冠的完整旋转,rotationalDelta
根据旋转方向改变其符号。
class MyInterfaceController: WKInterfaceController, WKCrownDelegate {
var value = 1
@IBOutlet var label: WKInterfaceLabel!
override func awake(withContext context: Any?) {
super.awake(withContext: context)
crownSequencer.delegate = self
}
func crownDidRotate(_ crownSequencer: WKCrownSequencer?, rotationalDelta: Double) {
let newValue = value + Int(rotationalDelta)
if newValue < 1 {
value = 1
} else if newValue > 10 {
value = 10
} else {
value = newValue
}
label.setText("Current value: \(value)")
}
}