WWDC2019 Session 808

Transcript

[ Music ]
[ Applause ]
>> With iOS 13, the way that we
design and build apps is going
to change in some subtle but
significant ways.
Dark Mode brings a new approach
to how we work with colors,
images, and text.
The new card-style sheets not
only present modal presentations
in a different way, but they
change how we interact with them
as well.
And the new contextual menu
control makes it easy to quickly
access contextually relevant
functionality with ease.
Now, between these three topics,
we've got a lot of ground to
cover, so let's dive in with
Dark Mode.
Now, last year we introduced
Dark Mode on macOS, and it was
pretty popular.
For many years, photo and video
apps have used dark interfaces
because they allow people to see
photos and videos with clarity.
Dark UIs are great for dark
lighting conditions; it's much
easier for our eyes to adjust
between a dark screen and the
world around us.
And, functional reasons aside,
some people just prefer dark
interfaces as a matter of
personal preference.
Dark Mode on iOS uses a fully
black background to provide
maximal contrast with text and
other foreground elements.
Black backgrounds blend in
seamlessly with the hardware
bezel to make your UI feel more
expansive and integrated with
the hardware itself.
In general, all of your apps
should support Dark Mode.
When the people using your app
have set their device to be in
Dark Mode, they'll expect your
app to change as well.
Now, supporting Dark Mode
involves moving towards the
updated iOS design system which
has been fully overhauled for
iOS 13.
Now, just so we're all on the
same page, "design system"
basically just means a set of
parts like colors, fonts, and
glyphs that work together in a
logical and consistent manor.
A rational -- excuse me -- and
consistent design system helps
people to learn and use apps
with ease.
By integrating with the iOS
design system, your app will
feel more familiar to people and
be more understandable.
Now, before we get into all of
the details, I'd like to share
some of the key design goals
that guided the design team's
efforts.
First and foremost, they wanted
iOS to remain familiar and
intuitive.
The iOS design system has
received a complete makeover but
the end result is still
recognizably iOS.
They sought to provide more
internal consistency.
All of the built-in apps were
redesigned to bring them into
alignment with each other, using
all of the components that we'll
be talking about with you today.
They also wanted the new design
system to include a range of
color options to help
successfully articulate
information hierarchy, to allow
the most important elements to
be the strongest and the less
important elements to recede.
They also put accessibility on
equal footing with these other
goals.
The new system fully supports
bold text and increased contrast
accessibility modes.
And, lastly, they wanted the new
design system to be simple,
straightforward, and easy to
implement.
All right, now let's get into
the specifics.
Color seems like the right place
to start.
Every app has a background, and
most apps have text and glyphs.
And some apps have separator
lines and grouping boxes to help
organize all of that content.
Now, when describing these
colors, we can naturally talk
about them by their values.
The text is black, the
background is white, etc., etc.
Now, as your interface gets a
little bit more complicated, the
length of that color palette
extends.
But that's not really an issue.
However, when you add support
for separate appearance, you now
have two parallel sets of colors
to keep in sync with each other
and manage.
At this point, it becomes
helpful to think about color in
a more abstract way.
This is where semantic colors
comes in.
A semantic color describes the
purpose of a color rather than
what its value is.
Because semantic colors are
extracted away from their exact
appearance, they can work both
-- they're dynamic.
So, a background color can be
black in Dark Mode and white in
Light Mode.
So instead of maintaining two
separate lists of colors for
Light and Dark Modes, you can
apply semantic colors from the
system palette to UI elements
and their appearance will
automatically adapt between
Light and Dark Modes, which is
pretty convenient.
iOS 13 includes a palette of
semantic colors for you to use.
Many of these colors have
primary, secondary, tertiary,
and quaternary values.
These variants are used to
express information hierarchy.
Label color has the most
contrast with the background, so
it's going to advance into the
foreground and grab your
attention and should be used for
primary elements like titles,
secondary for subtitles,
tertiary for placeholder text,
quaternary for disabled text.
The same basic principle applies
to background colors.
System background is a primary
background color, and it's pure
white in Light Mode and Pure
Black in Dark Mode.
Secondary and tertiary system
background colors allow you to
structure information
hierarchically.
There's also a parallel set of
background colors for grouped
table views.
Now, if you observe closely,
you'll note that the colors
aren't simply inverted between
Light and Dark Modes.
The table row backgrounds are
lighter in both.
There was a concerted effort to
select a palette of colors that
assured contrast while at the
same time keeping apps looking
similar between Light and Dark
Modes.
When you're designing for Dark
Mode, it's often helpful to
think about the lights as having
been dimmed rather than
everything being flipped inside
out.
The new system palette includes
fill colors and separator
colors.
All of the fill colors and one
of the separator colors are
semi-transparent, which helps
them to contrast well against
variable background colors.
The new palette includes six,
fully opaque gray values.
These colors are best used when
transparency would lead to
undesirable results.
So, for example, when drawing
intersecting grid lines,
overlapping semi-transparent
colors can create distracting
optical illusions.
And, if elements overlap, solid
colors are really helpful and
prevent things from looking
disabled or broken.
These colors are used throughout
the system for basically
everything, and we encourage you
to use them in your apps.
To get you started, you can
check out the full color palette
in the Apple Design Resources
and the Human Interface
Guidelines.
I'll have more information about
those at the end of the
presentation.
As before, we will continue to
provide tint colors for you to
use as your app's tint color.
These tint colors are dynamic,
meaning that they have variants
for Light and Dark Modes.
Each tint color has
high-contrast variants.
When they increase contrast,
accessibility setting is
enabled.
Tint colors get lighter in Dark
Mode and darker in Light Mode.
Now, if you opt to pick your own
tint color, try to select colors
that work well in both modes.
A color that works well in Light
Mode, though, might have
insufficient contrast in Dark
Mode, and vice versa.
Even when colors seem to you
like they're going to work well
in both modes, it's always best
to check your colors with an
online color contrast
calculator.
Now, because tint colors can be
dynamic, you can have two
slightly different colors for
Light and Dark Modes, and when
you're picking those colors, aim
for a contrast ratio of 4.5 to 1
or higher.
Strong color contrast improves
the accessibility and usability
of your apps.
The system palette should
basically have you covered for
most of your needs.
But, of course, you're going to
have to define your own colors
as well.
Perhaps you have user-selectable
label colors or status
indicators.
As with tint colors, any color
can be dynamic.
Given that the perception of
color is influenced by the
background that it's shown
against, you'll want to make
some adjustments to help keep
those color values looking
similar between modes or to make
sure that there's enough
contrast in both modes.
Now, all this time I've been
talking about Light and Dark
Modes, and as you may know,
that's a little bit of an
oversimplification.
There's actually two sets of
background colors that are
called "base" and "elevated."
As the names imply, these
background colors are about
layering interfaces.
When two light interfaces are
layered, a simple, diffuse drop
shadow is all you need to create
visual separation between the
two.
With dark interfaces, drop
shadows are slightly less
effective.
System background colors will
use the darker or base values
for background apps or
interfaces and the lighter,
elevated values for apps or
interfaces that are in the
foreground.
So take, for example, the
Contacts app.
It's using the base set of color
values when drawn on its own,
but when the same interface is
brought up in a modal
presentation in the phone app,
it uses the elevated background
colors.
Okay, let's look at a slightly
more complicated example.
Here's Mail running on an iPad.
On its own, Mail is drawn using
the base set of background
colors.
When we bring in Contacts in a
slide-over, we see that it's
being drawn with the elevated
set of background colors.
Now, the lighter appearance of
contacts helps it stand out from
Mail and advances it into the
foreground.
When Contacts is displayed side
by side in multitasking with
Mail, they are both drawn with
the elevated set of background
colors.
This helps provide contrast with
that splitter down the middle
and keeps the two apps from
blending together.
When we compose an email in
Mail, it comes up in a sheet.
This too is drawn with the
elevated background colors, but
the main app UI Mail looks a
little bit darker because modal
presentations draw an overlay
layer to dim their background
content and they cast a little
bit of a drop shadow.
Now, because background colors
change when your app is
elevated, you have to be mindful
that some of the darker colors
that you might use, even from
the system palette, may not
contrast well.
You always have to check your
designs when they're in elevated
state.
Again, semi-opaque fill and
separator colors are going to be
your best friends here.
They adapt gracefully between
base and elevated backgrounds.
Okay, moving on to materials.
Materials have been overhauled
and refined with iOS 13.
There are now four materials for
you to choose from with a range
of translucency levels: thick,
regular, thin, and ultra-thin.
These materials have been
designed to work well against a
variety of background contexts.
Their appearance will change
dynamically based on whether
someone is using your app in
Light or Dark Mode.
You can select which material
you want based on how much
separation you want from the
background, how much is most
appropriate.
The default material is regular,
and it's going to work well in
most circumstances.
But if you're presenting content
against this material that needs
a little bit more contrast, you
can use the thicker material.
For lighter-weight interactions,
maybe with simpler content, thin
and ultra-thin might be the
right way to go.
Which material is right for your
app just really depends on the
content that's being displayed
inside of it.
Speaking of which, light and
dark materials have an
accompanying set of vibrancy
values for labels, fills, and
separator colors.
Vibrancy is a visual affect
that's used throughout iOS and
other Apple platforms.
With system materials, it's
typically best to use vibrancy
rather than solid colors.
Because depending on the
background context, solid colors
can get really muddy and can
lead to some serious legibility
issues.
Vibrancy helps to maintain that
contrast regardless of what's in
the background.
The updated visual design system
for iOS also includes changes to
controls and bars.
Visual attributes like shape and
color have been brought into
greater alignment for more
internal consistency.
Controls are now drawn with
semantic colors so that they
gracefully adapt between Light
and Dark Modes.
If you use UIKit controls, you
get the benefits of all of this
for free.
If you spent time recreating
what UIKit gives you for free,
with custom controls, you may
want to, I don't know how to say
this, but stop doing that.
[ Laughter ]
[ Applause ]
Recreating what UIKit gives you
for free takes a lot of effort
and time, it's hard to do right,
and there's very little upside
for you.
But of course, custom controls
are often necessary.
UIKit does not provide
everything that you need.
For example, UIKit doesn't
provide a rating indicator.
So, when you're making custom
controls, you should use the
system palette so that you don't
have to do two different color
treatments for Light and Dark
Mode.
Navigation bars have also been
updated.
By default, they're now drawn
for large titles without the
background and shadow.
This allows the title to connect
seamlessly with the content that
it's labeling.
When content scrolls underneath
the navigation bar, the
background and shadow will fade
back in.
Now, large title bars,
navigation bars work especially
well with this visual treatment,
but it can be used for default
navigation bars as well.
So, in the Settings app, for
example, the master view's
navigation bar uses a large
title and it has no background
or shadow.
The standard navigation bar is
stylized to match.
Now, while a seamless navigation
bar looks great, it's not always
going to be appropriate.
That background is completely
transparent, so if you've tucked
anything underneath the
navigation bar, it's going to
show right through, and it's
probably not going to look very
good so don't use a treatment
then.
And if you have a really dense
interface with a lot of controls
and navigation bar next to the
content area, the clear visual
delineation that's provided by
that shadow can be really
helpful.
Okay. So, before we move on,
there's one more big feature
that I'd like to discuss with
you related to Dark Mode.
iOS has always provided a
handful of symbols for things
like table rows and toolbars.
When shown against a dark
background, the previous set of
symbols did not hold up very
well; they often looked a little
too thin.
So, the design team redesigned
all of the symbols in this
design system.
And what's really cool, as many
of you may know already, we're
making all of those glyphs
available for you to use with SF
Symbols.
SF Symbols includes over 1500
symbols.
And this isn't just a new set of
glyphs; this represents a
completely new way to think
about and design glyphs.
As the name suggests, SF Symbols
are designed to match the visual
design characteristics of San
Francisco, the system font for
iOS and other Apple platforms.
They can literally be typed out
so that they can be displayed
inline with text.
They have imbedded baseline
values to assure proper vertical
alignment relative to text.
And every SF symbol offers
small, medium and large-scale
variants relative to the current
size for different contexts.
And every symbol comes in nine
weights just like the SF font.
Because they're vector based, SF
Symbols can scale with text when
used with dynamic type.
And by offering multiple
weights, SF Symbols will become
bolder when the bold text
accessibility setting is
enabled.
Now, when designing comps of
your app, you can use the new SF
Symbols app to browse or search
for symbols, copy the ones that
you want to use, go over to your
design comp, and just paste them
in to a text layer.
The updated iOS Apple Design
Resources for Sketch is already
set up to work with symbols.
To swap out the symbols for this
tab bar, for example, you just
select the tab bar, go to the
inspector, and paste it in to an
override for the buttons.
I've been playing with this
feature for a few months now,
and I have to tell you, it's
totally game-changing.
Now, if the set of symbols that
we provide, 1500, isn't enough,
you can actually generate a
template in SVG, go into
Illustrator or Sketch and make
modifications to design your own
and get all the same benefits
that I just described.
It's really cool.
Okay. Now moving on to modal
presentations.
Modal presentations are often
called sheets because of the way
they slide up over the screen.
This animation informs people
that they've shifted from one
mode to another or into a new
modality of your app.
With iOS 13, sheets have a new
card-like appearance that's used
throughout the system.
This style is now the default.
And the benefit of this style is
that it gives this little peek
of what's in the background,
which is a helpful reminder that
there's a different UI that
accommodates a different task or
mode of the app that's still in
the background.
With the full-screen modal
sheet, you can sometimes forget
what you were doing before.
Card-style modal sheets can be
dismissed by swiping down
anywhere on the screen.
And that dismiss gesture is
often going to be easier than
tapping a button in the
navigation bar.
As with swiping to go back,
pulling down to dismiss
facilitates one-handed
operation, which is particularly
convenient on devices with
larger displays.
Now, you may wonder, "How does
this work with scrolling?"
When the content area has been
scrolled, swiping down will
scroll it back to the top.
When scrolled all the way back
to the top, continuing to swipe
will dismiss the modal
presentation.
But at any time, you can pull
down from the top edge of the
card to dismiss.
Now, if this gesture is
problematic for any reason, like
you have a control in the
content area that works with
vertical swiping, it can be
prevented.
It can also be prevented when
there's a mandatory decision
that's required in the modal
presentation itself.
So, for example, here we either
need to cancel or add.
And if we pull down, it will
just bounce right back.
In cases where people must make
a decision before leaving a
modal context, you can prevent
that dismiss gesture and display
an action sheet asking people
how they wish to proceed, which
is actually pretty convenient.
Now, in case you're wondering,
all of what I just described
here doesn't mean that you don't
need to have buttons for modal
cards anymore.
Buttons are critical for letting
people know that they can close
the modal.
Buttons are also necessary for
accessibility reasons.
And people might not be familiar
with using the gesture yet or
don't want to.
And when the content area's been
scrolled down, tapping a button
might actually be more
convenient.
Similarly, seeing negative and
affirmative action pairs at the
top of the screen lets people
know what choices they have to
act within this modal
presentation, what actions they
can take.
Now, we think the new card style
is pretty great, which is why
it's now the default for iOS.
But they're not always
appropriate.
For some tasks, like editing a
picture or marking up a
screenshot, you really want to
maximize screen space and
minimize visual distraction.
For workflows like this, you
should use the optional
full-screen presentation.
And one final comment about
modal presentations: modals are
for switching modes.
Don't use them just because you
like the animation or the visual
style of them.
So, a good example of modal
sheet use is from Calendar.
Calendar has two primary modes:
viewing events in a grid or list
and then creating or editing
events.
Viewing your calendar involves
scanning all the events that are
in your calendar and then
selecting them to see detail.
Since we're still in the viewing
mode, a child view is used for
displaying those details.
As the name suggests, a child is
an extension of the parent view.
A child view should be a
continuation of the task or
workflow that was started in
that parent view.
When creating or editing an
event, a modal sheet signals to
the people who are using
Calendar that they've switched
into a distinct and new
workflow.
Okay. Now for our final iOS
design topic, and that's
contextual menus.
With the introduction of 3D
Touch a few years ago came a new
interaction called Peek and Pop.
Peek and Pop was primarily about
getting a larger preview of
content.
If available, actions could be
accessed by swiping that preview
upwards.
Contextual menu shifts things
around a bit and puts the focus
on actions.
Actions are presented
immediately.
Contextual menus also work on
all devices.
Peek and Pop only worked with 3D
Touch, so it wasn't available on
any iPads and some iPhones.
While 3D Touch makes contextual
menus appear more quickly, the
gesture to get a contextual menu
is just tap and hold, and you
can do that on any touch device.
Contextual menus are comprised
of two parts: there's a menu of
commands that can be performed
on an item or selection, and an
optional preview of the selected
item that'll be affected.
That preview can be a helpful
reminder of what item will be
affected by those menu of
commands.
The exact appearance of
contextual menus will change
based on device size and
orientation.
On iPhone, the preview and phone
are stacked, in portrait, and
the same thing on iPad when
there's three commands or fewer.
Otherwise, the menu and preview
are displayed side by side.
Contextual menus will appear
directly above the object they
affect or as close to it as
possible.
As with macOS contextual menus,
you can choose the order of menu
commands.
It's best to put the most
frequently used or accessed
commands at the top so that
they're easier to access.
Otherwise, you should group
commands because they're heavily
related with each other.
So, it totally makes sense that
cut, copy, and paste are near
each other.
You can also use separators to
create visually distinct groups.
And iOS contextual menus can be
hierarchical, meaning that some
of these options can lead to a
secondary submenu.
Contextual menus on iOS also
include glyphs to help people
find what they're looking for
more quickly, and they allow you
to warn people about destructive
actions by labeling them in red.
You should try to add contextual
menus to every object in your
app.
Think about macOS.
You expect every object in every
app to have a contextual menu.
They're great way to learn what
actions can be performed on an
object.
And the more iOS apps add
contextual menus, the more
people will expect every app to
support contextual menus,
including yours.
Okay, one final comment about
contextual menus.
The actions they contain should
still be available somewhere
else in your main interface.
Contextual menus are powerful
and convenient, but people might
not always think to access them.
Now, I can't wait to see what
you do with Dark Mode, updated
modal presentations and the new
contextual menu.
For more information and
resources, go to
developer.apple.com/design.
There you can find the updated
SF font, the SF Symbols app, and
the updated iOS Design Resources
for Sketch.
The Adobe Photoshop and Adobe XD
resources will be coming later
this summer.
Also, check out the Apple Human
Interface Guidelines for more
details about everything that I
covered today.
Okay. Thank you for your time.
[ Applause ]