よりぶろ

アプリのUIとかについて書いてく予定

Sketchのバージョン41で追加された『シンボルのOverrides』を使ってUIデザインの状態管理をラクにする

f:id:ryo_pan:20161108231602p:plain

Sketchが装いも新たにバージョン41に上がりました。

 今回のアップデートの目玉は何と言っても『Nested Overrides』ではないでしょうか。

説明文には

Symbol instances can now override their nested Symbols to any other Symbol with the same size.

と書かれています。これ、どんな機能かと言うと『シンボルのOverrides』なんですね。

 

Overridesについて軽くおさらいをすると、Sketchのシンボルには『インスタンスに対してラベルや画像を(親の情報を維持したまま)別の内容に上書きすることができる』機能がついているんですね。それがOverridesです。

 

f:id:ryo_pan:20161108233154p:plain

 

こういったシンボルを作って

 

f:id:ryo_pan:20161108233233p:plain

 

インスタンスを複製して配置した後に、こんな感じにそれぞれのテキストや画像を変えられるのです。

ちなみに親のシンボルの情報を変更すれば(テキストサイズを変えるとかそれぞれのレイアウトを変えるとか)即インスタンスにも適用されるという、大変便利な機能です。

 

で、今回のアップデートで追加されたのは『シンボルのOverrides』です。

つまりどういうことかと言うと、

 

f:id:ryo_pan:20161108234147g:plain

 

うおおおぉぉぉぉぉぉシンボルが置き換えられるぞぉぉぉぉおおお!!!!!!

 

これ、マジで本当に神アップデート。

 

何が便利かと言うと、これまでは例えばTabBarなら

・TOP画面用のTabBarのシンボル

・検索画面用のTabBarのシンボル

・設定画面用の……

というように、それぞれの画面に合わせた状態のものを別個で作るのが普通だったんですよね。ボタンの色を活性・非活性で分けたりとか。

NavigationBarもそう。BackButtonがあって、Titleがあって、右のボタンも画面によって変えて……みたいな。

 

でも、シンボルのOverridesさえあればもう大丈夫。それが全て1つのシンボルでできちゃうんです。画期的!

 

これまではこうだったのが

f:id:ryo_pan:20161109012036p:plain

 

これからはこうなって

f:id:ryo_pan:20161109012109p:plain

 

こう!!!

f:id:ryo_pan:20161109012223p:plain

 

シンボルのOverridesの適用方法

では実際にシンボルをOverridesできるようにするにはどうすればいいか?を解説します。

と言っても条件はたった2つ。

・Overridesする対象がシンボル化されていること

・Overridesし合うシンボルはアートボードのサイズが同じであること

とても簡単です。

 

例えばTabBar用にアイコンを作っていたとして、それぞれ活性状態・非活性状態全部を30x30pt(px)で作っていれば、Overridesの候補リストに出てきます。

逆に言うと1pxでもサイズが違うと候補には出てきませんし、同じサイズであれば別の箇所で使おうと思っていたシンボルが候補に出てくることもあります。

現状、惜しいことにシンボルを半角スラッシュで階層分けしてもOverrides時には一緒くたに並んで出てきてしまうので、同じサイズのシンボルがたくさんあると探すのに一苦労します。

 

テキストのOverridesテクニックと合わせる

さてここからが本題です。

同じサイズのシンボルであればOverridesで置き換えられることが分かりました。

なんだか、NavigationBarとかTabBarを1つのシンボルで管理できるような気がしてきましたよね?でも問題がまだあります。テキストをどうするか、です。

例えばA画面とB画面で違うフォントサイズのタイトルを表示したい、となってしまうと、テキストのOverridesは文言を変えるだけなので不可能です。つまり別々のシンボルが必要になります。

なんてこった、この壁は乗り越えられないのか……? いえいえ、そんなことはありません。ちゃんと解決策があります。

 

実はテキストのOverridesは半角スペースを入れれば消えてくれるのです。

文章で書いてもわかりづらいですね。実際のモノを見てみましょう。

 

f:id:ryo_pan:20161109005640p:plain 

 

これが親のシンボルです。いくつもテキストが重なっているのがわかるかと思います。

で、こいつのOverridesをですね、

 

f:id:ryo_pan:20161109001058g:plain

 

こうして!半角スペースを入れてッターン! すれば見事に消えてくれるのです。なんて素晴らしいテクニック。

ちなみにネタ元はこちら。

Multi-type navigation bar symbols in Sketch – Aenism

 

上のGIFアニメを見て頂くとなんとなくわかりますが、このNavigationBarのシンボルには

・左側にBackButtonのシンボル

・左側にラベル

・真ん中にラベル(通常のタイトル)

・真ん中にラベル(小さいタイトル)

・真ん中にラベル(サブタイトル)

・右側にラベル

・右側にラベル(Bold)

・右側にアイコン類のシンボル

が入っています。すごいですね。てんこ盛りです。

 

シンボルのOverridesは「表示しない」という選択肢もできるので、

 

f:id:ryo_pan:20161109001729g:plain

 

このように右側のアイコンは非表示にして(リストから None を選ぶ)ラベルだけのパターンを作る、なんてことができます。ファンタスティックですね。

 

いかがでしょうか。いよいよ1つのシンボルだけで複数の状態管理ができるような気がしてきたんじゃないかと思います。

これまでは状態の異なるNavigationBarやらを5個も6個も作ってきましたが、そんなめんどくさいこととはお別れです!さらば!ありがとうSketch!最高!!!

 

こぼれ話)ほんとはIcon Fontでやろうと思ってた

実はつい最近まで、このシンボルのOverridesのようなことができないかと考えていました。やっぱほら、画面の状態によってアイコン変えるとか一括で管理したいじゃないですか。

で、たぶんIcon Fontでやるのがラクだろうなと思い、実際にやってる人もいたので、しょうがないこの運用で試してみるか〜〜〜……なんて考えていたのがほんの数日前。

 

 

でも今回のアップデートでこのことはもう考えなくても済みました。いやーホント助かった。。

今のところ思いつく活用法がNavigationBarやTabBarくらいですが、ひょっとしたらもっと秘めたポテンシャルがあるのかもしれません。引き続きいろいろ試行錯誤していこうと思います。