Tray - SwiftUIモーダルトレイライブラリ
概要
TrayはSwiftUIでモーダルトレイ形式の画面表示を実現するライブラリです。iOSのモーダルシートのような見た目で、複数画面の遷移を自然なアニメーションで行えることが特徴。TrayNavigationLink
を使った柔軟なナビゲーション機能や、コンテンツサイズに応じて動的に高さを調整する機能を備えています。また、各画面ごとにナビゲーションバーの表示・非表示やスタイルを細かく設定可能で、アプリのUIデザインに合わせたカスタマイズが容易です。Swift Package Manager対応で導入も簡単です。
リポジトリの統計情報
- スター数: 4
- フォーク数: 0
- ウォッチャー数: 4
- コミット数: 6
- ファイル数: 8
- メインの言語: Swift
主な特徴
- SwiftUIで簡単にiOSスタイルのモーダルトレイ表示を実現
TrayNavigationLink
による柔軟な画面遷移と履歴管理- コンテンツの高さに応じた動的なサイズ調整機能
- ページごとにナビゲーションバーの表示・スタイルを個別設定可能
技術的なポイント
TrayはSwiftUIのモーダル表示の弱点を補い、より自然でカスタマイズ性の高いトレイインターフェースを提供することを目的としています。標準の.sheet
や.fullScreenCover
では制限されがちな画面遷移の柔軟性やUIの細かな制御を可能にしています。
まず、TrayNavigationLink
という独自のコンポーネントによって、複数の画面をトレイ内で階層的かつシームレスに遷移させることができます。これにより、モーダルトレイ内での深いナビゲーションが可能となり、従来のモーダルの単一画面表示の制約を解消しています。さらに、SwiftUIのNavigationLink
とは異なり、トレイ内の遷移履歴も管理されているため、戻る操作やナビゲーションバーの制御も柔軟です。
次に、トレイの高さが表示するコンテンツのサイズに応じて自動的に変わる仕組みを備えています。これにより、画面によってトレイの大きさが最適化され、無駄な空白やスクロールの発生を抑制。ユーザーにとっても見やすく操作しやすいUIが実現します。
アニメーション面でもこだわりがあり、表示・非表示時のトランジションや画面切り替え時の動きを細かくカスタマイズ可能。スムーズで自然な動きを実装でき、ユーザー体験を向上させます。加えて、ナビゲーションバーはページごとに表示・非表示の切り替えやスタイル変更が可能で、アプリのテーマや画面の役割に応じた柔軟なデザインが行えます。
技術的には、Swift Package Managerで配布されており、Xcodeでの統合がスムーズ。コードもSwiftUIのモダンな設計思想に則っているため、既存のSwiftUIプロジェクトに違和感なく組み込めます。コードベースはシンプルながら拡張性も考慮されており、必要に応じてカスタムトランジションやナビゲーション挙動の調整が可能です。
総じてTrayは、SwiftUIでiOSらしいモーダルトレイを実装したい開発者にとって、柔軟性と使いやすさを両立した魅力的なライブラリと言えます。標準コンポーネントでは実現しづらい複雑なナビゲーションやUI調整を簡単に行える点が特長です。
プロジェクトの構成
主要なファイルとディレクトリ:
- .gitignore: git管理除外設定ファイル
- AGENTS.md: ソフトウェアエージェントの情報(AI関連か)
- CLAUDE.md: 特定のエージェントかプロジェクト説明の補足?
- Package.resolved: Swift Package Managerの依存解決情報
- Package.swift: Swift Packageの設定ファイル。依存関係やターゲット定義を記述
- README.md: プロジェクト概要や使用方法の説明
- Sources/: 実際のライブラリコード(Swiftファイル群)
- Tests/: テストコード
まとめ
SwiftUIで高度なモーダルトレイUIを簡単に実装できる実用的なライブラリ。
リポジトリ情報:
- 名前: Tray
- 説明: A SwiftUI library for presenting modal tray interfaces with smooth navigation and customizable animations.
- スター数: 4
- 言語: Swift
- URL: https://github.com/Archetapp/Tray
- オーナー: Archetapp
- アバター: https://avatars.githubusercontent.com/u/8635253?v=4