SwiftUIに欲しい機能5選
SwiftUIは徐々に機能が拡充され、iOS17頃からかなり実用的になってきました。UIkitでは癖のあった共有機能なども、SwiftUIでは1行で実現できるようになり、その進化は目覚ましいものがあります。
今回は、私が個人的にSwiftUIネイティブで実装されて欲しいと思う機能5選を紹介します。
リサーチ不足により、既にSwiftUI単独で実現できる機能が含まれている可能性があります
*2024年10月時点の情報です
是非コメントにてSwiftUIに実装されて欲しい機能を教えてください!
1. カメラ機能
iOS17からPhotosPicker
の導入により、簡単かつ安全に写真アプリから、ユーザーがアプリ内に画像を取り込めるようになりました。一方で、カメラを使用するには依然としてUIImagePickerController
をUIViewControllerRepresentable
でラップして使う必要があります。
写真アプリからの取り込みにはPHPickerViewController
が推奨されていることから、そろそろカメラ機能に対するネイティブAPIの登場を期待したいところです。さらに、アスペクト比の調整などもネイティブUIでできるようになると便利です。
2. アプリ内ブラウザ
アプリの利用規約やプライバシーポリシーを、ユーザーをアプリから離脱させることなく表示するために、アプリ内ブラウザはよく使われています。現状ではSFSafariViewController
をUIViewControllerRepresentable
でラップする方法しかありません。
これがShareLink
のように数行で簡単に使用できるようになれば、より扱いやすくなるでしょう。
3. 選択可能なText
Webページのようにアプリ内の文字列をコピー・共有できる機能は、ユーザー体験の一部として当然のものです。
しかし、SwiftUIのText
ビューは依然として文字選択に対応していません。Text
ビューに.textSelection(.enabled)
を適用することで文字選択が可能になりそうですが、Appleの公式ドキュメントにも記載されている通り、iOSではシステムメニューは表示されても、文字列の一部を選択してコピーすることはできません。
現状では、UITextView
をisEditable = false
、isScrollEnabled = false
として、UIViewControllerRepresentable
でラップするしかありませんが、この方法にはサイズ調整の癖があり、別途対応が必要です。この解決策については、また別の記事で紹介します。
4. プレースホルダー付きのTextEditor
TextField
はプレースホルダーを設定できますが、TextEditor
にはそれがありません。現時点では、TextEditor
の空文字時に.overlay
を使ってプレースホルダーを重ねる方法や、iOS16以降であればTextField
にaxis: .vertical
を設定して複数行入力に対応する方法などが考えられます。
しかし、TextField
にはスクロール機能がないため、厳密には代替とは言えません。もちろん、自分で拡張することも可能ですが、デフォルトのAPIとして対応してほしいところです。
5. Progressive Blur(可変ブラー)
最後はprogressive blur(可変ブラー)です。アプリライブラリやiOS18の写真アプリ、ジャーナルアプリなどで見られる、このボカシ効果は、ブラーの半径が座標によって徐々に変化するというものです。
Appleのネイティブアプリでは、iOS17以降で利用可能なvariableBlur
という非公開APIを使用していると考えられますが、UIkitでもSwiftUIでも現状では使用できません。iOS18で公開されるのではと期待されていましたが、まだ実現していません。
皆さんが望むSwiftUIの機能や実装を、ぜひコメントで教えてください!