swiftui-animation
SwiftUIにおける高度なアニメーション、トランジション、マッチドジオメトリエフェクト、Metalシェーダー統合の実装を包括的にガイドするスキルです。iOS・macOSアプリでアニメーションやビュー遷移、ヒーローアニメーション、GPUアクセラレーションエフェクトを構築する際に活用してください。
description の原文を見る
This skill provides comprehensive guidance for implementing advanced SwiftUI animations, transitions, matched geometry effects, and Metal shader integration. Use when building animations, view transitions, hero animations, or GPU-accelerated effects in SwiftUI apps for iOS and macOS.
SKILL.md 本文
SwiftUI Animation Expert
SwiftUIの高度なアニメーションとMetalシェーダー統合の実装に関する専門的なガイダンスを提供します。アニメーション曲線、スプリング、トランジション、matchedGeometryEffect、PhaseAnimator、KeyframeAnimator、およびGPU加速シェーダーエフェクトをカバーしています。
このスキルを使用する場合
- モーションデザインの原則の理解とアニメーション使用時の判断
- アニメーションのアクセシビリティおよびプラットフォーム適合性の確保
- SwiftUIでのアニメーション実装(スプリング、イージング、キーフレーム)
- ビュートランジションの作成(フェード、スライド、スケール、カスタム)
- matchedGeometryEffectを使ったヒーローアニメーションの構築
- Metalシェーダーを使ったGPU加速エフェクトの追加
- アニメーション性能の最適化
- 複数フェーズの編成されたアニメーションの作成
クイックリファレンス
アニメーション基礎
// 明示的アニメーション(推奨)
withAnimation(.spring(response: 0.4, dampingFraction: 0.75)) {
isExpanded.toggle()
}
// iOS 17+ スプリングプリセット
withAnimation(.snappy) { ... } // 速い、小さいバウンス
withAnimation(.smooth) { ... } // 緩い、バウンスなし
withAnimation(.bouncy) { ... } // より多くのバウンス
よく使うトランジション
// 基本
.transition(.opacity)
.transition(.scale)
.transition(.slide)
.transition(.move(edge: .bottom))
// 組み合わせ
.transition(.move(edge: .trailing).combined(with: .opacity))
// 非対称
.transition(.asymmetric(
insertion: .move(edge: .bottom),
removal: .opacity
))
Matched Geometry Effect
@Namespace var namespace
// ソースビュー
ThumbnailView()
.matchedGeometryEffect(id: "hero", in: namespace)
// デスティネーションビュー
DetailView()
.matchedGeometryEffect(id: "hero", in: namespace)
Metal シェーダーエフェクト(iOS 17+)
// カラー操作
.colorEffect(ShaderLibrary.invert())
// ピクセル変位
.distortionEffect(
ShaderLibrary.wave(.float(time)),
maxSampleOffset: CGSize(width: 20, height: 20)
)
// フルレイヤーアクセス
.layerEffect(ShaderLibrary.blur(.float(radius)), maxSampleOffset: .zero)
参考資料
詳細なドキュメントは references/ で利用可能です:
-
motion-guidelines.md - HIG モーションデザインの原則
- 目的駆動型モーション哲学
- アクセシビリティ要件
- プラットフォーム固有の考慮事項(iOS、visionOS、watchOS)
- 避けるべきアニメーションアンチパターン
-
animations.md - 完全なアニメーションAPI ガイド
- 暗黙的 vs 明示的アニメーション
- スプリングパラメータとプリセット
- アニメーション修飾子(速度、遅延、繰り返し)
- 複数ステップシーケンスのPhaseAnimator
- プロパティ固有のタイムラインのKeyframeAnimator
- カスタムアニメーション可能なプロパティ
-
transitions.md - ビュートランジションガイド
- 組み込みトランジション(オパシティ、スケール、スライド、移動)
- 組み合わせおよび非対称トランジション
- matchedGeometryEffect の実装
- ヒーローアニメーションパターン
- コンテンツトランジション(iOS 17+)
- カスタムトランジション作成
-
metal-shaders.md - GPUシェーダー統合
- SwiftUIシェーダー修飾子(colorEffect、distortionEffect、layerEffect)
- Metalシェーダー関数の作成
- UIViewRepresentable を使った MTKView の埋め込み
- クロスプラットフォームMetal統合(iOS/macOS)
- パフォーマンスに関する考慮事項
よく使うパターン
展開可能なカード
struct ExpandableCard: View {
@State private var isExpanded = false
var body: some View {
VStack {
RoundedRectangle(cornerRadius: isExpanded ? 20 : 12)
.fill(.blue)
.frame(
width: isExpanded ? 300 : 150,
height: isExpanded ? 400 : 100
)
}
.onTapGesture {
withAnimation(.spring(response: 0.35, dampingFraction: 0.75)) {
isExpanded.toggle()
}
}
}
}
リストアイテムの表示
ForEach(Array(items.enumerated()), id: \.element.id) { index, item in
ItemRow(item: item)
.transition(.asymmetric(
insertion: .move(edge: .trailing).combined(with: .opacity),
removal: .move(edge: .leading).combined(with: .opacity)
))
.animation(.spring().delay(Double(index) * 0.05), value: items)
}
パルスインジケータ
Circle()
.fill(.blue)
.frame(width: 20, height: 20)
.scaleEffect(isPulsing ? 1.2 : 1.0)
.opacity(isPulsing ? 0.6 : 1.0)
.onAppear {
withAnimation(.easeInOut(duration: 1.0).repeatForever(autoreverses: true)) {
isPulsing = true
}
}
ベストプラクティス
- モーションに目的を持たせる - 目的のないアニメーションを追加しない。体験をサポートし、それを邪魔しないようにする
- モーション機能を任意にする - ハプティクスやオーディオで補完。モーションだけで情報伝達しない
- 簡潔さを目指す - 短く正確なアニメーションは軽く感じられ、情報を効果的に伝える
- 明示的アニメーションを優先する -
.animation()修飾子ではなくwithAnimationを使用して明確性を確保 - スプリングアニメーションを使用する - より自然でiOS らしい感覚
.spring(response: 0.35, dampingFraction: 0.8)で開始する - ほとんどのインタラクションに適した良いデフォルト- アニメーションを400ms 以下に保つ - それ以上は遅く感じる
- ユーザーがモーションをキャンセルできるようにする - アニメーション完了まで待つことを強制しない
- デバイスでテストする - シミュレータのアニメーション時間は異なる
- シェーダーパフォーマンスをプロファイルする - 複雑なエフェクトではGPU時間が重要
トラブルシューティング
アニメーションが機能しない
- 状態変更が
withAnimationでラップされていることを確認 - プロパティがアニメーション可能であることを確認
- ビューが実際に変更されていることを確認
Matched Geometry ジャンプする
- 両ビューが同じIDと namespace を使用していることを確認
- トグル時に明示的な
withAnimationを使用 - 適切なレイヤリングのための
zIndexを確認
シェーダーが表示されない
.metalファイルがターゲットに追加されていることを確認- シェーダー関数の署名が期待される形式と一致していることを確認
- 変位エフェクトの場合
maxSampleOffsetが正しく設定されていることを確認
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- jamesrochabrun
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/jamesrochabrun/skills / ライセンス: MIT
関連スキル
nano-banana-2
inference.sh CLIを通じてGoogle Gemini 3.1 Flash Image Preview(Nano Banana 2)で画像を生成します。テキストから画像を生成する機能、画像編集、最大14枚の複数画像入力、Google Searchグラウンディング機能に対応しています。トリガーワード:「nano banana 2」「nanobanana 2」「gemini 3.1 flash image」「gemini 3 1 flash image preview」「google image generation」
octocode-slides
洗練されたマルチファイル形式のHTMLプレゼンテーションを生成します。6段階のフロー(概要 → リサーチ → アウトライン → デザイン → 実装 → レビュー)で構成されています。各スライドは独立したHTMLファイルとなり、iframeで読み込まれます。「スライドを作成してほしい」「プレゼンテーションを作ってほしい」「HTMLスライドを生成してほしい」「デックを構築してほしい」といった依頼や、ノート・ドキュメント・コードを洗練されたプレゼンテーションに変換する際に使用できます。
gpt-image2-ppt
OpenAIのgpt-image-2を使用して、視覚的に優れたPPTスライドを生成します。Spatial Glass、Tech Blue、Editorial Monoなど10種類のキュレーション済みスタイルに対応し、ユーザーが提供したPPTXファイルを模倣するテンプレートクローンモードも搭載しています。HTMLビューアと16:9形式のPPTXファイルを出力します。プレゼンテーション、スライド、ピッチデック、投資家向けPPT、雑誌風PPTの作成依頼などで活用してください。
nano-banana
Nano Banana PRO(Gemini 3 Pro Image)およびNano Banana(Gemini 2.5 Flash Image)を使用したAI画像生成機能です。以下の場合に活用できます:(1)テキストプロンプトからの画像生成、(2)既存画像の編集、(3)インフォグラフィックス、ロゴ、商品写真、ステッカーなどのプロフェッショナルなビジュアルアセット制作、(4)複数画像での人物キャラクターの一貫性保持、(5)正確なテキスト描画を含む画像生成、(6)AI生成ビジュアルが必要なあらゆるタスク。「画像を生成」「画像を作成」「写真を作る」「ロゴをデザイン」「インフォグラフィックスを作成」「AI画像」「nano banana」またはその他の画像生成リクエストをトリガーとして機能します。
oiloil-ui-ux-guide
モダンでクリーンなUI/UXガイダンス・レビュースキルです。新機能や既存システム(Webアプリ)に対して、実行可能なUI/UX改善提案、デザイン原則、デザインレビューチェックリストが必要な場合に活用できます。CRAP(コントラスト・反復・配置・近接)をベースに、タスクファーストなUX、情報設計、フィードバック・システムステータス、一貫性、affordances、エラー防止・復旧、認知負荷を重視します。モダンミニマルスタイル(クリーン・余白・タイポグラフィ主導)を強制し、不要なテキストを削減、アイコンとしての絵文字を禁止し、統一されたアイコンセットから直感的で洗練されたアイコンを推奨します。
axiom-hig-ref
Apple Human Interface Guidelines リファレンス — 色(セマンティックカラー、カスタムカラー、パターン)、背景(マテリアル階層、ダイナミック背景)、タイポグラフィ(標準スタイル、カスタムフォント、Dynamic Type)、SF Symbols(レンダリングモード、色、多言語対応)、ダークモード、アクセシビリティ、プラットフォーム固有の考慮事項を網羅したガイドラインです。