介绍
苹果今年在WWDC上正式发布了watchOS 3,这是对Apple Watch核心软件的最新更新。 尽管仅展示了一些“标题”用户功能,但watchOS 3为开发人员打开了许多API,以创建更多功能的watchOS应用程序。 这些API中有很多已经在iOS上可用了多年,现在已经添加到watchOS中,包括CloudKit,SpriteKit和SceneKit。
在本教程中,我将向您展示如何在watchOS 3应用程序中使用所有这些新API。 我还将向您展示一些对现有watchOS框架最重要的补充。
先决条件
您还需要从GitHub下载入门项目。
1.新框架
SpriteKit和SceneKit
对于开发人员来说,watchOS 3的两个最大附加功能是SpriteKit和SceneKit框架。 这些框架分别在Apple Watch应用程序中提供了丰富的2D和3D图形。 您可以使用新的WKInterfaceSCNScene
和WKInterfaceSKScene
接口对象在应用程序中显示场景,它们都是WKInterfaceObject
子类。 与iOS上的SCNView
和SKView
相似,这些接口对象提供了可操纵场景的属性和方法,包括播放/暂停功能以及默认照明。
打开启动程序项目,然后打开Interface.storyboard文件。 您将在该文件中看到,我已经为您设置了一些基本接口。 对于本部分的教程,我们只对最简单的带有单个按钮的界面控制器感兴趣。 转到Xcode右下角的对象库 ,并将其拖到“ 播放/暂停”按钮上方的SceneKit场景对象中:
接下来,打开“ 属性” 检查器 ,并将项目中包含的场景文件( Scene.scn )分配给此接口对象的Scene属性:
要在我们的代码中使用此功能,请在Assistant编辑器中打开SceneKitInterfaceController.swift文件,并为您的接口对象创建并链接一个名为sceneItem
的出口:
@IBOutlet var sceneItem: WKInterfaceSCNScene!
请注意,为了正确显示SceneKit内容, 必须将情节提要中的接口对象与代码中的IBOutlet
链接。 在编写本教程时,Apple文档中没有提到它,但是此设置是必需的。
最后,要实现按钮的播放/暂停功能,请使用以下命令替换现有的didPress(button:)
方法:
@IBAction func didPress() {
if let paused = sceneItem.scene?.isPaused {
sceneItem?.scene?.isPaused = !paused
}
}
生成并运行您的应用程序,您将在屏幕上看到一个红色的方块在旋转:
按“ 播放/暂停”按钮应停止并根据需要启动场景的动画。
尽管我们在本教程中仅介绍了如何显示SceneKit内容,但添加对SpriteKit的支持非常相似。 唯一的主要区别是SpriteKit资产必须与WKInterfaceSKScene
对象一起使用,而不能与WKInterfaceSCNScene
对象一起使用。
用户通知
iOS 10和watchOS 3的另一个附加功能是UserNotifications框架。 该框架提供了一种简单的方法来处理由应用程序发送和传递的本地和远程通知。
请注意,iOS上的UserNotifications框架中并非所有API都可以在watchOS中使用。 但是,存在的功能在watchOS和iOS上具有相同的功能。
CloudKit,GameKit,CoreAudio和AVFoundation
watchOS 3的另一个主要新增功能是提供了以前仅在其他Apple平台(包括CloudKit,GameKit,CoreAudio和AVFoundation)上可用的框架。
尽管watchOS中没有这些框架提供的全套API,但是Apple Watch应用中可以使用的类和方法与iOS和macOS对应的类和方法完全相同。
2.现有框架
除了添加许多新框架之外,watchOS 3还对现有框架进行了许多更改,包括WatchKit和ClockKit。
手表套件
我们将要研究的WatchKit框架中的第一个新功能是新的WKCrownSequencer
类。 此类允许您检索有关数字表冠的详细数据,包括其当前转速以及是否闲置。 虽然可以通过WKCrownSequencer
对象的属性访问此信息,但是WKCrownDelegate
协议使您可以更轻松地跟踪更改。
现在,所有WKInterfaceController
子类都具有crownSequencer
属性,该属性是WKCrownSequencer
类的实例。 这意味着要跟踪数字表冠中的更改,只需指定一个委托对象并实现所需的方法。
在您的项目中,打开您的CrownInterfaceController.swift文件,并使您的CrownInterfaceController
类符合WKCrownDelegate
协议:
class CrownInterfaceController: WKInterfaceController, WKCrownDelegate {
...
}
接下来,将您当前的awake(withContext:)
方法替换为以下内容:
override func awake(withContext context: Any?) {
super.awake(withContext: context)
crownSequencer.delegate = self
crownSequencer.focus()
}
在上面的代码中,我们在crownSequencer
上调用focus
方法,因为否则它将不会接收来自数字王冠的事件。 如果界面上的某个项目被用户点击集中,那么您将需要再次调用此方法,使crownSequencer
可以检测到数字冕运动。
最后,将以下两个方法添加到您的类中:
func crownDidRotate(_ crownSequencer: WKCrownSequencer?, rotationalDelta: Double) {
if let speed = crownSequencer?.rotationsPerSecond {
label.setText("Crown\nspeed:\n\(speed)")
}
}
func crownDidBecomeIdle(_ crownSequencer: WKCrownSequencer?) {
label.setText("Crown\nis idle")
}
为了加载此接口,请打开Interface.storyboard文件,然后拖动Initial Controller箭头以选择底部的接口:
生成并运行您的应用程序,您会看到,移动手表的数字表冠后,屏幕上的标签会反映当前状态:
如果您使用的是Apple Watch模拟器,则只需用Mac的鼠标或触控板滚动即可“转动”数字表冠。
除了检测数字式表冠运动之外,watchOS 3中的WatchKit框架还为您的应用程序提供了以下类,以在不使用界面项的情况下检测手势:
-
WKLongPressGestureRecognizer
-
WKPanGestureRecognizer
-
WKSwipeGestureRecognizer
-
WKTapGestureRecognizer
顾名思义,这些手势识别器的工作方式与iOS上的手势识别器的工作方式非常相似。 如果您使用的是SceneKit,SpriteKit或基于图像的自定义界面来显示内容,则这些类对于检测触摸特别有用。
时钟套件
watchOS 3还为应用程序带来了一些新的重要功能,这些应用程序利用ClockKit框架在表盘上带来复杂性。
首先,由于watchOS 3中应用程序具有新的后台处理功能,如果用户将应用程序的复杂性之一放在其表盘上,则您的应用程序将保留在内存中并处于准备就绪状态。 此外,保证您的应用程序每天可以响应多达50次的推送通知来更新其内容。
接下来,一些新模板已添加到超大型复杂系列中,包括CLKComplicationTemplateExtraLargeColumnsText
, CLKComplicationTemplateExtraLargeRingImage
, CLKComplicationTemplateExtraLargeRingText
和CLKComplicationTemplateExtraLargeSimpleImage
。
最后, CLKTextProvider
类现在提供了一个API,用于创建可本地化的文本提供程序,以将不同的文本用于特定的设备区域。
通行证
虽然PassKit已经在watchOS 2中以有限形式提供,但是watchOS 3可以在手表上直接支持应用内Apple Pay购买。 这是通过一些新的类和协议来完成的,包括:
-
WKInterfacePaymentButton
:用于显示预先设计的“ 使用Apple Pay进行购买”按钮。 -
PKPaymentAuthorizationController
:用于显示带有付款信息的模型界面,供用户确认。 该类执行与PKPaymentAuthorizationViewController
类相同的角色,但不依赖于UIKit。 这意味着PKPaymentAuthorizationController
类可以在iOS和watchOS上使用。 -
PKPaymentAuthorizationControllerDelegate
:可以使类符合此要求。 通过此协议,您的应用可以响应用户有关您的付款的操作,包括他们何时选择付款方式或何时授权付款。
结论
总体而言,watchOS 3是Apple Watch应用程序开发人员的重要发行版。 现在,通过添加包括SceneKit,SpriteKit,GameKit和AVFoundation在内的框架,可以更轻松地创建游戏和媒体丰富的应用程序。 通过添加CloudKit以及对WatchKit,ClockKit和PassKit的改进,您可以创建比以往更多功能的应用程序,同时更加独立于iPhone。
翻译自: https://code.tutsplus.com/tutorials/whats-new-in-watchos-3--cms-26943