A welcome addition to WatchKit 3.0 is the swipe gesture recognizer. Previously, I used an ordinary button to switch between modes in my Watch Face app, but now I can mimic the behaviour of official watch faces by swiping left or right.
The change is quite simple to make too. First, you just need a Group control that contains an image (into which you’ll draw the watch face). Then, you drag a couple of Swipe Gesture Recognizers into the group, and change the properties so that one is a left swipe and the other is a right swipe.
Having done that, you need to insert an action for each of the gestures – you can do that by control-dragging from the gesture in the storyboard outline into the InterfaceController code. Make sure to add an action (rather than an outlet) – that way, Xcode will create a stub method for you with the correct signature.
The logic for the swipe gesture just switches between watch faces then re-draws the time:
// Tissot --> Hermes --> Roman @IBAction func swipeRight(_ sender: Any) { switch (watchFace.id()) { case WatchFaceId.tissot: watchFace = HermesWatchFace() case WatchFaceId.hermes: watchFace = RomanWatchFace() case WatchFaceId.roman: watchFace = TissotWatchFace() } drawTime() // refresh with updated background & different styles }
and the left swipe reverses the transition order.
See also this earlier post that explains how you can draw directly into an image in WatchKit – combined with the swipe gesture recogniser, it provides a neat way to switch between different modes in any app.