Swift 获取WatchOS数字皇冠值
我一直在做一些关于制作苹果手表应用程序的研究,但是我在获取数字皇冠的价值方面遇到了一些困难。我看了一下WKRownSequencer,但不知道该怎么处理它。有人能告诉我如何得到一个值为1-10的变量,当你打开数字皇冠时,它会发生变化。谢谢 在WatchOS3之后,可以获取数字皇冠的价值。检查 基本上,您需要在视图控制器中使用。示例代码如下所示:Swift 获取WatchOS数字皇冠值,swift,watchkit,Swift,Watchkit,我一直在做一些关于制作苹果手表应用程序的研究,但是我在获取数字皇冠的价值方面遇到了一些困难。我看了一下WKRownSequencer,但不知道该怎么处理它。有人能告诉我如何得到一个值为1-10的变量,当你打开数字皇冠时,它会发生变化。谢谢 在WatchOS3之后,可以获取数字皇冠的价值。检查 基本上,您需要在视图控制器中使用。示例代码如下所示: - (void)willActivate { [super willActivate]; self.crownSequencer.del
- (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表示冠部已完成完全旋转
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)")
}
}
注意:请不要直接使用此代码,它只是一个示例。首先查看苹果网站上的文档。您需要将
InterfaceController
子类与WKCrownDelegate
相一致,并实施crownDidRotate
方法
如果希望值介于1和10之间,只需实现一些简单的逻辑,以检查添加rotationalDelta
时的值是多少,如果超出范围1-10,则根据新值将超出的方向,将值映射到1或10。我假设您希望value
为Int
,如果不希望,只需删除rotationalDelta
到Int
的转换,value
将为Double
请记住,1.0的rotationalDelta
表示皇冠完全旋转,并且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)")
}
}
类MyInterfaceController:WKInterfaceController,wkDelegate{
var值=1
@IBOutlet var标签:WKInterfaceLabel!
覆盖函数唤醒(withContext:有吗?){
super.awake(withContext:context)
crownSequencer.delegate=self
}
func crownDidRotate(crownSequencer:WKCrownSequencer?,rotationalDelta:Double){
设newValue=value+Int(旋转增量)
如果newValue<1{
值=1
}否则,如果newValue>10{
值=10
}否则{
值=新值
}
label.setText(“当前值:\(值)”)
}
}
您好,谢谢您的回答!在实现这一点时,我需要一个新类,因为我试图将WKInterfaceController和WKCrownDelegate放入类游戏场景中,但它与已存在的SKScene存在问题。请在问题中包含您的类定义,以便我可以提供帮助,没有上下文,我无法确定此问题的原因。但您肯定需要使该InterfaceController
类符合要使用crown控制的WKCrownDelegate
协议。您应该添加crownSequencer.focus()以唤醒(使用上下文在SwiftUI中设置Delegates后,这变得更容易: