watchOS 4 Tutorial Part 3: Animation
In this third part of our watchOS 4 tutorial series, learn how to add animations into your watchOS app! By Audrey Tam.
Sign up/Sign in
With a free Kodeco account you can download source code, track your progress, bookmark, personalise your learner profile and more!
Create accountAlready a member of Kodeco? Sign in
Sign up/Sign in
With a free Kodeco account you can download source code, track your progress, bookmark, personalise your learner profile and more!
Create accountAlready a member of Kodeco? Sign in
Contents
watchOS 4 Tutorial Part 3: Animation
15 mins
Presenting the Controller
Open ScheduleInterfaceController.swift, find table(_:didSelectRowAt:)
, and replace its contents with the following:
let flight = flights[rowIndex]
let controllers = ["Flight", "CheckIn"]
presentController(withNames: controllers, contexts: [flight, flight])
Here, you retrieve the appropriate flight from flights
using rowIndex
, create an array containing the identifiers of the two interface controllers you want to present, and then present them, passing flight
as the context
to both.
Build and run. Tap a flight, and you’ll see a pair of interface controllers are presented. Swipe left to reveal the check-in controller, then tap the button to trigger the animation and check-in:
This looks great as-is, but it’d be even better if checked-in flights were highlighted on the schedule interface controller, as well. You’ll address that in the next, and final, section.
Highlighting the Flight
Open FlightRowController.swift, and add the following method to it:
func updateForCheckIn() {
let color = UIColor(red: 90/255, green: 200/255, blue: 250/255, alpha: 1)
planeImage.setTintColor(color)
separator.setColor(color)
}
Here, you’re creating an instance of UIColor
, then using it to set the tint color and color of planeImage
and separator
, respectively. This method will be called from within an animation closure, so the color change will animate nicely.
Next, open ScheduleInterfaceController.swift, and add the following property below flights
:
var selectedIndex = 0
You’ll use this to remember which table row was selected when presenting the two interface controllers. Now you just need to set it when a table row is selected. Add the following just above the call to presentController(withNames:contexts:)
in table(_:didSelectRowAt:)
:
selectedIndex = rowIndex
This sets selectedIndex
to the index of the selected table row.
Finally, add the following to ScheduleInterfaceController
, just below awake(withContext:)
:
override func didAppear() {
super.didAppear()
// 1
guard flights[selectedIndex].checkedIn,
let controller = flightsTable.rowController(at: selectedIndex) as? FlightRowController else {
return
}
// 2
animate(withDuration: 0.35) {
// 3
controller.updateForCheckIn()
}
}
Here’s what’s happening in the code above:
- You check to see if the selected flight is checked-in. If so, you try to cast the row controller, at the corresponding index in the table, to an instance of
FlightRowController
. - If that succeeds, you use the animation API on
WKInterfaceController
to execute the given closure, over a duration of 0.35 second. - In the closure, you call the method you just added to
FlightRowController
, which changes the color of the plane image and separator of that table row, and provides users with some visual feedback that they’re now checked-in.
Build and run. Follow the same steps as before to check-in for a flight, and you’ll see that when you’re returned to the schedule interface controller, the colors of the plane image and separator on the corresponding table row crossfade to a new color:
Congratulations! You’ve now finished implementing your very first set of WatchKit animations.
Where to Go From Here?
Here is the finished example project from this tutorial series.
In this tutorial you’ve learned how to create two different kinds of WatchKit animation. The first, using an animated sequence of images, and the second, using the animation API on WKInterfaceController
. You’re now suitably primed to add plenty of visual flair to your own watchOS 4 apps!
Sadly, this is where we end this tutorial series.
If you have any questions or comments on this tutorial, please join the forum discussion below! :]
If you enjoyed this tutorial series, you’d definitely enjoy our book watchOS by Tutorials.
The book goes into further detail on making watchOS apps and is written for intermediate iOS developers who already know the basics of iOS and Swift development but want to learn how to make Apple Watch apps for watchOS 4.
It’s been fully updated for Swift 4, watchOS 4 and Xcode 8 — get it on the raywenderlich.com store today!