ハイライト
iOS 15 では、UIKit に多くの重要な更新が加えられています。UIButton.Configuration は宣言型のボタン設定メソッドを提供し、UIDatePicker はスクロール ホイール スタイルを復元し、Sheet は中程度の高さの戻り止めをサポートし、クロスアプリ ドラッグが iPhone に導入され、UIColor に systemMint などの新しい色が追加されます。
主な内容
iOS 15 の UIKit アップデートは、生産性、UI の改良、API の強化、パフォーマンスの向上、セキュリティとプライバシーの 5 つの方向をカバーしています。
生産性の面では、iPadOS 15 ではセンター ウィンドウ マルチタスク スタイルが導入されており、長押しして [新しいウィンドウで開く] を選択することでトリガーできます。キーボードナビゲーションは以下に基づいていますUIFocusSystemは、同じ API セットを tvOS と共有するようになりました。UIMenuBuilderメイン メニューを構築するために使用され、コマンド キーのショートカットにカテゴリと検索インターフェイスが与えられます。
UIの洗練という点では、UIToolbarそしてUITabBar下までスクロールすると背景素材を削除します。リスト ヘッダーには、プレーン、グループ化、目立つ、および特別な目立つという 4 つの新しいスタイルがあります。UIDatePickerスクロールホイールスタイルが復活し、クリックによるキーボード入力がサポートされました。
APIの機能強化に関しては、UIButton新しい構成 API を取得し、塗りつぶし、色合い、グレーなどのスタイルをサポートしました。SF Symbols は、レイヤード、パレット、マルチカラーの 3 つのカラー モードをサポートしています。UIImage追加したbyPreparingForDisplay()そしてbyPreparingThumbnail(ofSize:)非同期メソッド。
パフォーマンスの点では、UICollectionView と UITableView のセルのプリフェッチが改善され、セルの準備に 2 フレーム近くの時間がかかるようになりました。UIImage の新しい API は、バックグラウンド スレッドで画像をデコードして、メイン スレッドの遅延を回避できます。
セキュリティとプライバシーの観点から、UILocationButton位置情報のアクセス許可を 1 回限り付与します。ユーザーが明示的に貼り付けアクションを呼び出したとき (Cmd-V または [貼り付け] ボタンをクリック) に、貼り付けアクションで通知バナーが表示されなくなりました。
##詳細
「新しいウィンドウで開く」アクションを作成する
(01:41)
let newSceneAction = UIWindowScene.ActivationAction { _ in
let userActivity = NSUserActivity(activityType: "com.myapp.detailscene")
return UIWindowScene.ActivationConfiguration(userActivity: userActivity)
}
キーポイント:
UIWindowScene.ActivationActioniOS 15の新しいAPIです- iPad および Mac Catalyst では「新しいウィンドウで開く」を表示、iPhone では自動非表示
- Info.plist で複数のシーンのサポートを有効にする必要があります
メインメニューをカスタマイズする
(03:06)
class AppDelegate: UIResponder, UIApplicationDelegate {
override func buildMenu(with builder: UIMenuBuilder) {
guard builder.system == .main else { return }
// 使用 builder 修改主菜单...
}
}
キーポイント:
- 存在する
UIApplicationDelegate中程度の書き換えbuildMenu(with:) builder.system == .mainこれはメインメニューを変更する場合にのみ実行してください。- 使用
UIMenu.Identifierシステムメニューへの参照 (例:.file、.edit、.view)
ツールバーとタブバーの外観をカスタマイズする
(06:26)
let appearance = UITabBarAppearance()
appearance.backgroundEffect = nil
appearance.backgroundColor = .blue
tabBar.scrollEdgeAppearance = appearance
let scrollView = ... // 内容滚动视图
viewController.setContentScrollView(scrollView, for: .bottom)
キーポイント:
- iOS 15 中
UIToolbarそしてUITabBar一番下までスクロールすると、デフォルトで背景素材が削除されます - 設定
scrollEdgeAppearanceこの動作はカスタマイズ可能です - システムが正しいスクロール ビューを推測できない場合は、次を使用します。
setContentScrollView(_:for:)明確に指定された
UIButton.Configuration の使用
(11:31)
var config = UIButton.Configuration.tinted()
config.title = "Add to Cart"
config.image = UIImage(systemName: "cart.badge.plus")
config.imagePlacement = .trailing
config.buttonSize = .large
config.cornerStyle = .capsule
let addToCartButton = UIButton(configuration: config)
キーポイント:
UIButton.Configuration宣言的なボタン構成を提供します- サポートされているスタイル:
.plain、.gray、.tinted、.filled - タイトル、画像、サイズ、角丸スタイルなどの属性を設定できます。
- 構成後に更新できます。
button.configuration = updatedConfig
レイヤーカラーを使用する シンボル
(13:30)
let configuration = UIImage.SymbolConfiguration(
hierarchicalColor: UIColor.systemOrange
)
let image = UIImage(
systemName: "sun.max.circle.fill",
withConfiguration: configuration
)
キーポイント:
- iOS 15 では 3 つの新しい SF シンボルのカラー モードが追加されます
.hierarchicalColor単層カラーを適用する.paletteColors指定した色を複数適用する.multicolorシンボルに組み込まれたマルチカラー表現を使用する
セル構成更新プロセッサ
(19:30)
let cell: UICollectionViewCell = ...
cell.configurationUpdateHandler = { cell, state in
var content = UIListContentConfiguration.cell().updated(for: state)
content.text = "Hello world!"
if state.isDisabled {
content.textProperties.color = .systemGray
}
cell.contentConfiguration = content
}
キーポイント:
- iOS 15 では新しいクローズドセル更新方法が追加されました
- セルのサブクラスを作成する必要はなく、セルの作成時に直接設定できます。
stateパラメータには以下が含まれますisHighlighted、isSelected、isDisabled待機状態
画像表示を非同期に準備する
(21:01)
if let image = UIImage(contentsOfFile: pathToImage) {
Task {
let preparedImage = await image.byPreparingForDisplay()
imageView.image = preparedImage
}
}
キーポイント:
byPreparingForDisplay()バックグラウンドスレッドで画像をデコードする- メインスレッドの遅延を回避し、スクロールのパフォーマンスを向上させます。
- 使用
Task非同期操作を開始する
サムネイルを生成する
(21:29)
if let bigImage = UIImage(contentsOfFile: pathToBigImage) {
Task {
let smallImage = await bigImage.byPreparingThumbnail(ofSize: smallSize)
imageView.image = smallImage
}
}
キーポイント:
byPreparingThumbnail(ofSize:)指定したサイズのサムネイルを生成する- バックグラウンドで実行し、メインスレッドを解放します。
- システム キャッシュを利用し、手動スケーリングよりも効率的
重要ポイント
1. UIButton.Configuration を使用してボタン コードをリファクタリングします。
アプリに多くのカスタム ボタン スタイルがある場合は、次を使用します。UIButton.Configuration分散したプロパティ設定を置き換えます。これにより、コードがより明確になり、保守が容易になります。
実装のアイデア: よく使用されるスタイルのファクトリ メソッドを作成します (例:primaryButton()、secondaryButton())、事前設定された値を返します。UIButton.Configuration。これらの構成を必要な場所に直接適用します。
2. ツールバーとタブバーの新しい外観を確認してください
iOS 15 中UIToolbarそしてUITabBarデフォルトでは、一番下までスクロールすると背景素材が削除されます。アプリが古いルック アンド フィールに依存している場合は、視覚的な問題がないか確認してください。
実装のアイデア: アプリを実行し、コンテンツの一番下までスクロールして、ツールバー/タブバーが期待どおりかどうかを確認します。問題がある場合は、カスタムを設定してくださいscrollEdgeAppearance。
3. 階層化されたカラーシンボルを使用してブランドの認知度を高めます
アプリにブランドカラーがある場合は、hierarchicalColorSF Symbolであなたのブランドカラーを引き出しましょう。これは、単色の色合いよりもさらにレイヤー化されています。
実装アイデア: ブランドカラーの作成UIImage.SymbolConfiguration、主要なシステム アイコン (ナビゲーション バー ボタン、タブ アイコンなど) に適用されます。
4. 非同期画像準備を使用してスクロールのパフォーマンスを向上させる
アプリに大量の画像が表示される場合、スクロールがフリーズすることがあります。使用byPreparingForDisplay()背景に画像を用意します。
実装アイデア: セル内configurationUpdateHandlerで非同期タスクを開始し、画像を準備して更新しますimageView.image。セルが再利用されるときは、タスクがキャンセルされていることを確認してください。
5. iPhone でクロスアプリのドラッグ アンド ドロップを有効にする
iOS 15 では、アプリ間のドラッグ アンド ドロップが iPhone に導入されます。アプリがドラッグ アンド ドロップ データ (URL、画像、テキストなど) を受け入れる場合は、必ず実装してくださいUIDropInteraction。
実装アイデア: 実装dropInteraction(_:performDrop:)、からUIDropSession入れitemProviders、タイプに基づいてさまざまなデータ形式を処理します。
関連セッション
- iPad アプリを次のレベルに — iPadOS 15 のマルチウィンドウ、キーボード ショートカット、ポインターの機能強化
- UIKit ボタン システムの紹介 — UIButton.Configuration API の詳細な説明
- TextKit 2 の紹介 — 次世代テキスト エンジン TextKit 2
- iPad キーボード ナビゲーションに注目 — iPad キーボード ナビゲーション システム
コメント
GitHub Issues · utterances