通过教程更新的非官方watchOS-第5章:选择器

非官方watchOS通过教程更新主页

入门

代码杀手

选择器显示样式

p。 106 Series 4手表默认启用了触觉反馈。 我不会添加将其禁用到项目的代码,因为默认行为很棒。 但这是一个示例:

 覆盖func awake(withContext context:Any?){ 
super.awake(withContext:context)
self.crownSequencer.isHapticFeedbackEnabled = false
}

有关更多详细信息,请参阅Apple的WKCrownSequencer文档。

清单样式

堆叠式

序列样式

您的第一个选择器

p。 109这是我的代码编辑版本。 我避免魔术数字。

 覆盖func awake(withContext context:Any?){ 
super.awake(withContext:上下文)
// 1
var weightItems:[WKPickerItem] = []
为我在Constants.Weight.minOunces ... Constants.Weight.maxOunces中
{
// 2
让item = WKPickerItem()
item.title =字符串(i)
weightItems.append(item)
}
// 3
weightPicker.setItems(weightItems)
// 4
weightPicker.setSelectedItemIndex(盎司-1)
}

p。 110您可以使用数字表冠模拟滚动,方法是将光标置于手表模拟器的数字表冠上,然后使用笔记本电脑的触控板或鼠标的滚轮滚动。

序列样式选择器

p。 113我已将图像资产temp * 重命名 为temperature * 。 我会尽量避免在代码中使用缩写词 ,因为它们会造成混淆,尤其是对于非英语母语者。 Xcode具有自动补全功能,因此此类缩写几乎没有什么好处。 在这种情况下,“ temp”对于以英语为母语的人也很困惑,因为在计算机世界中,“ temp”通常用来表示“ temporary”。

现在,让我们看一下本书代码中的摘录:

  var tempItems:[WKPickerItem] = [] 
因为我在1 ... 4 {
// 2
让item = WKPickerItem()
item.contentImage = WKImage(imageName:“ temp-\(i)”)
tempItems.append(item)
}

那4是我们应该删除的魔术数字,Swift 4.2功能可以帮助我们优雅地解决此问题。

编辑MeatTemperature.swift ,使MeatTemperature枚举符合CaseIterable,以便Swift会自动为我们的枚举生成allCases属性,该属性是按其定义的顺序排列的所有case数组

 枚举MeatTemperature:整数,CaseIterable { 

在此过程中,让我们将温度移至常量:

 结构常数{ 
结构重量{
静态让minOunces = 1
...
}
结构温度{
静态let imagePrefix =“ temperature-”
}
}

现在我们的代码可以读取:

  var temperatureItems:[WKPickerItem] = [] 
对于1中的我... MeatTemperature.allCases.count {
// 2
让item = WKPickerItem()
item.contentImage =
WKImage(imageName:
“ \(Constants.Temperature.imagePrefix)\(i)”)
temperatureItems.append(item)
}

有关Swift 4.2的新枚举功能的更多信息,请查看Swift 4.2的新增功能?

注意:当我使用Series 4模拟器的数字表冠在列表项中滚动时,当前出现错误:

  2018–09–21 09:07:27.134168 + 0800 Carnivore WatchKit扩展[91377:3664688] [定位器] 4型没有定位器 

awake()中添加以下行并不能消除此问题:

  self.crownSequencer.isHapticFeedbackEnabled = false 

今天,我将在物理上进行Series 4 Watch的测试,并在需要时向Apple提交错误。

然后去哪儿?