WWDC Quick Look 💓 By SwiftGGTeam
What's new in UIKit

What's new in UIKit

元の動画を見る

ハイライト

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パラメータには以下が含まれますisHighlightedisSelectedisDisabled待機状態

画像表示を非同期に準備する

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、タイプに基づいてさまざまなデータ形式を処理します。

関連セッション

コメント

GitHub Issues · utterances