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の機能や実装を、ぜひコメントで教えてください!


