Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
TipKitTips
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Ryomm
February 22, 2026
Programming
210
0
Share
TipKitTips
2026.02.22 Hakodate.swift #1
Ryomm
February 22, 2026
More Decks by Ryomm
See All by Ryomm
なあ兄弟、 余白の意味を考えてから UI実装してくれ!
ktcryomm
11
11k
iOSでQRコード生成奮闘記
ktcryomm
2
330
iOS18でQRコードが表示されなくなった🤷
ktcryomm
0
160
リョムキャットのパーフェクトSwiftネーミング教室
ktcryomm
0
2.4k
Slackを使いこなせ!Slack効率3000倍
ktcryomm
0
1.4k
クソアプリ作って煙突詰めた♪
ktcryomm
0
110
Other Decks in Programming
See All in Programming
作って学ぶ、 JSX (TSX) ランタイムの基本
syumai
7
1.5k
TSKaigi Night Talks 2026_TypeScriptでサプライチェーンの整合性を型に閉じ込める
geekplus_tech
0
160
並列実装の現場、2ヶ月間実務でAIを使い倒したAIもPCも私も限界が近い
ming_ayami
0
100
OSもどきOS
arkw
0
400
技術記事、AIに書かせるか、自分で書くか? 〜それでも私が自分の手で書く理由〜 / #QiitaConference
jnchito
2
1.3k
3Dシーンの圧縮
fadis
1
590
AI時代のUIはどこへ行く?その2!
yusukebe
19
6.5k
Datadog × OpenTelemetry 入門と実践のあいだ
kn_to_maxpno
1
130
権限チェックの一貫性を型で守る TypeScript による多層防御
mnch
4
1.1k
SPMマルチモジュールで テストカバレッジを取得する技法
yosshi4486
0
140
Java × distroless で 軽量なコンテナイメージを / Java on Distroless
contour_gara
0
470
AIとASP.NET Coreで雑Webアプリを作った話
mayuki
0
170
Featured
See All Featured
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.2k
Thoughts on Productivity
jonyablonski
76
5.2k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
220
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.4k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
400
Optimizing for Happiness
mojombo
378
71k
How to Ace a Technical Interview
jacobian
281
24k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
62
54k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
Practical Orchestrator
shlominoach
191
11k
Bash Introduction
62gerente
615
210k
Transcript
None
None
None
None
None
None
None
None
None
TipKit! TipKitの話します。
TipKitはこういうヒントを表示するためのフレームワークです。
ドキュメントを見るとiOS17以上!
そういえば先週、トヨタさんがこんなツイートしてましたね
そういえば先週、トヨタさんがこんなツイートしてましたね
はい、みなさん使えますね!ガンガンTipKit使っていきましょう!
基本のTipの使い方はこんな感じです。
Tipを定義して、
popoverTipでボタンにTipを生やしています。
Tipの出し方はinlineとpopoverの2種類あり、ここではpopoverを使ってます。
ここでTip!背景色を変えたい。
これを
…こうしたい。
一部の簡単なスタイル変更は、専用のAPIが用意されています。 背景色を変更するには、tipBackgroundが使えます。
ドキュメントを見るとpopoverのTipには現在適用されないということになってますが…
使えます。
ここでTip!もっとスタイルを変えたい。
これを
…こうしたい。
もっとカスタマイズしたい場合はTipViewStyleを使います。 TipViewStyleを適用した構造体にスタイルを定義し、スタイルを適用したいTipの階層にtipViewStyleで設定すればカスタマイズできます。 こんな感じでZStackでColorを敷いて、吹き出しをプライマリーカラーになるようにして〜… …おっと。しっぽの部分に色がついてない!
None
TipViewStyleは尻尾の部分をいじることができません。 そんなときは先ほどのtipBackgroundを使うと背景をつけることだけはできます!
None
さて、TipKitの大きな特徴として、Tipの状態をTipKit側で制御してくれます。 書き方は大きく2種類あり、TipKitのマクロの@Parameterから判定する方法と、Eventを定義して、そのイベントから判定する方法です。 TipKitが状態を持ってくれるなんて便利だなぁ…アプリに新規で実装する場合はそう思うかもしれません。
問題となるのは、既存のヒントをTipKitに移行する場合です。 例えば、 アプリが制御していたものをTipKit内部のものに差し替えることになるので表示条件の状態がリセットされたり TipKit内ではAPIやUserDefaultを呼び出せなかったり Viewと状態がめちゃ密結合で既存のアーキテクチャと合わなくてキモかったり @ParameterはTipKitのマクロなので、外部の値をそのまま挿入できなかったり… つまりTipKitから状態を剥がさないと使いにくい状況になります。
ここでTip!TipKitから状態を引き剥がしたい
None
まず、普通にTipKit内で状態を管理するパラメータを定義します。
そして、Rulesでパラメータがtrueの時に表示するように設定します
@ParameterはTipKitのマクロなので、ここにそのまま値を挿入することはできません。なので、値を挿入できるようにラップしていきます。
None
挿入したい値をwrappingValueとして定義しています。ここは本来ViewModelなどもっと上層からTipKitに渡したい値になりますが、便宜上@Stateとして定義しています。
onChangeでwrappingValueの変更を監視し、MemoTipのパラメータに挿入します。
onChangeだけだと初期化時にwrappingValueの値がMemoTipのパラメータに反映されないので、onAppearでも挿入します。
こうすることで、TipKitから状態を引き剥がし、外部から値を挿入することができるようになります。 TipKitくんがよかれと思って状態管理を引き取ったことで事態が複雑化していて、世の無情さを感じることができますね。
こうすることで、TipKitから状態を引き剥がし、外部から値を挿入することができるようになります。 TipKitくんがよかれと思って状態管理を引き取ったことで事態が複雑化していて、世の無情さを感じることができますね。
TipKitの哀愁を感じたところで、TipKitTips is over! 自分ならもっとTipKitをイキイキさせてやれると思った方、TipKitチャンスです。 今回はLTなので大幅に端折ってますが、インタラクションを入れたり、結構色々な使い方ができます。 ぜひTipKitを使って快適なアプリ体験を提供しましょう!ありがとうございました〜