本文章是一个系列,如果有兴趣可以看看以下文章:
AppleWatch开发入门(1)——界面布局
AppleWatch开发入门(2)——控制器生命周期、界面跳转
AppleWatch开发入门(3)——Table视图的应用
AppleWatch开发入门(4)——Picker视图的应用
AppleWatch开发入门(5)——Menu的使用
AppleWatch开发入门(6)——watchOS中通知的应用
AppleWatch开发入门(7)——AlertController
AppleWatch开发入门(8)——动画
一、简介
Picker到底是个什么东西?如下图所示:
Picker有3种模式:List、Stack、Sequence:
1、List:有点像tableview,一行一行展示
2、Stack:有点像图片浏览器,一页一页展示,翻动时有动画效果
3、Sequence:与Stack类似,只不过翻动时没有动画效果
二、创建Picker
在 storyboard 中拖入 Picker:
因为Picker有3种模式(List、Stack、Sequence),我们每种模式弄一个:
三、代码部分
工欲善其事,必先利其器,呃,必先看头文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| @available(watchOS 2.0, *) public class WKInterfacePicker : WKInterfaceObject { public func focus() public func resignFocus() public func setSelectedItemIndex(_ itemIndex: Int) public func setItems(_ items: [WKPickerItem]?) public func setCoordinatedAnimations(_ coordinatedAnimations: [WKInterfaceObject]?) public func setEnabled(_ enabled: Bool) } @available(watchOS 2.0, *) public class WKPickerItem : NSObject, NSSecureCoding { public var title: String? public var caption: String? @NSCopying public var accessoryImage: WKImage? @NSCopying public var contentImage: WKImage? }
|
具体实现
1、 Pick 中的数据源是 WKPickerItem,先懒加载[WKPickerItem]
1 2 3 4 5 6 7 8 9 10 11 12
| lazy var items: [WKPickerItem] = { var its = [WKPickerItem]() for i in 0...4 { let item = WKPickerItem() item.title = "Title" + "\(i)" item.caption = "Caption" + "\(i)" item.accessoryImage = WKImage(image: UIImage(named: "ad_0" + "\(i)")!) item.contentImage = WKImage(image: UIImage(named: "ad_0" + "\(i)")!) its.append(item) } return its }()
|
这里图片资源大家根据实际需求添加,加载图片时要特别注意,否则可能加载不出,详细见:AppleWatch开发(1)——界面布局 这篇文章的末尾部分。
2、 连线
1 2 3
| @IBOutlet var listPicker: WKInterfacePicker! @IBOutlet var stackPicker: WKInterfacePicker! @IBOutlet var sequencePicker: WKInterfacePicker!
|
3、 设置数据
1 2 3 4 5 6 7 8
| override func awake(withContext context: Any?) { super.awake(withContext: context) listPicker.setItems(items) stackPicker.setItems(items) sequencePicker.setItems(items) sequencePicker.focus() }
|
这里要注意,在有多个Picker时,需要设置focus()
,不然系统不知道你要滚动哪一个。