View in English

  • メニューを開く メニューを閉じる
  • Apple Developer
検索
検索を終了
  • Apple Developer
  • ニュース
  • 見つける
  • デザイン
  • 開発
  • 配信
  • サポート
  • アカウント
次の内容に検索結果を絞り込む

クイックリンク

5 クイックリンク

ビデオ

メニューを開く メニューを閉じる
  • コレクション
  • トピック
  • すべてのビデオ
  • 利用方法

その他のビデオ

ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。

  • 概要
  • トランスクリプト
  • コード
  • iPadOSのポインタの作成

    Magic Keyboard、マウス、トラックパッド、またはその他の入力デバイスをiPadにつなげて使用される方が、お持ちのAppを最大限に活用できるようにしましょう。Pointer Interaction APIを使って、iPadのポインタのカスタマイゼーションを追加して、ボタンやカスタムビューをポインタと連動させ、特定のエリアでポインタの形状を変える方法を説明します。 iPad上でのポインタインタラクションについてさらに学んでいただき、このセッションを最大限に活用していただくために、“Design for the iPadOS pointer”および “Handle trackpad and mouse input”もご覧になることを推奨します。

    リソース

    • Enhancing your iPad app with pointer interactions
      • HDビデオ
      • SDビデオ

    関連ビデオ

    WWDC23

    • UIKitの新機能

    WWDC21

    • iPad Appを次のレベルに

    WWDC20

    • トラックパッドとマウスの入力のハンドリング
    • iOSピッカー、メニュー、アクションを使った構築
    • iPadOSポインタのデザイン
  • ダウンロード

    こんにちは WWDCへようこそ “iPadOSポインタ用ビルド” UIkitエンジニアのモハメドです あとでiOSシステムUIチームの ジョーイも参加します iPad OS ポインタの ビルド方法を説明します

    iOS13.4からiPad向けのポインタの サポートが導入されました 発売開始以来タッチベースであったOSにとって 最新の入力メソッドになります Macに既存のインタラクションモデルを 取り込むのではなく ポインタを追加することで 得られるメリットと タッチベースの入力との共存方法を 考えてみました 答えはアダプティブポインタにあります 精度に合わせてコントロール上を ホバーするよう変形したり 選択しているコントロールを 明確に示したりします つまりコンテキストなヒントを与えるために ポインタの形や動きが変わるということです

    例えば 文の上をホバーすると ポインタがI字型になったり 文章の先頭に戻ったりします この動画ではiPad OSの ポインタとアプリケーションを 同じ方法でアップデートする手順を紹介します

    そしてiOS13.4に導入されたポインタを カスタマイズするAPIや アップデートに際して知っておくべき 実例も紹介します

    ポインタのUIの基本的な デザインの原則にも触れます ポインタのデザインに関係する原則や 思考過程の詳細については デザインに関するセッションで確認してください

    iPadにポインタデバイスをつなげれば アプリケーションがなくても 自動的にポインタ機能が使えるようになります すべてのシステムに ポインタサポートが内蔵されているからです UIBarButtonItemや UISegmentControl UIMenuController といったコントロールには ポインタのエフェクトや動作が 組み込まれています スクロールビューは 2本の指をマウスのように 動かすと反応します 画面を拡大することもできます

    テーブルまたはコレクションビューでは パンするスワイプアクションも可能です UITextViewやUItextInteractionを使う 他のコンポーネントでは 一連のテキスト操作や ジェスチャーの編集もできます Macユーザーはよくご存じでしょう

    UIDragInteractionは クリック&ドラッグで素早くドラックできます 画面をタッチして 長押しする必要はありません

    UIContextMenuInteractionは 2回クリックすれば 新しくコンパクトなメニューを表示します

    ポインタのアップデート法に入ります

    トップダウン方式でお伝えします 優先度の高いAPIから始めます 洗練されたエクスペリエンスのために 他のシステムのUIと一貫するように 動作と見た目を調整します ポインタに関するAPIは スタックごとに存在しています コントロールの多くは ポインタエフェクトを内蔵しており バーのボタンのように デフォルトでエフェクトが利用できます UIButtonなどの場合は APIでエフェクトをカスタマイズできます

    UIPointerInterractionは カスタムUIがポインタに反応し 相互作用できるように 他のシステムと一貫性を持たせます これを使えばシステムが提供するエフェクトから 最適なビューを適用できます アプリケーション内で ポインタの形を変えることも可能です UIHoverGestureRecognizerは ポインタの動きを直接反映します ホバーやハイライトの適用 またはポインタの形の修正の必要がない― カスタム動作に最適です ジェスチャーやイベントに追加する ポインタについての詳細は トラッドパッドやマウスポインタを 制御するセッションを確認してください アプリケーションをアップデートするのは OSとの一貫性があるエクスペリエンスを 求めているからでしょう どこにポインタサポートを加えるか決める際は Human Interface Guidelinesや 内蔵のアプリケーションを参考にしてください まずはコントロールに 適切なエフェクトがあるか確認しましょう クロームというアプリケーションの 上下にあるバーで 確認することができます

    UIBarButtonItemsはSystmItemやimage もしくはtitleのAPIを使って作ります 適切なポインタエフェクトが自動的に使えます

    カスタムビューのAPIを使うなら 自分で動作を実装する必要があるでしょう もしくはビューに役立つAPIを利用するか ポインタのインタラクションを インストールして管理します

    カスタムビューAPIを通じて バーに設置したUIButtonには 元から有効なインタラクションが 組み込まれています またシステムがバーのボタンに 適切だと考えたエフェクトを設定します

    UIbuttonの便利なAPIを使えば このエフェクトを微調整できます UIButtonにある2段階の 便利なAPIを使えば簡単です 自動的にエフェクトを有効するために button.isPointerInteractionEnableを trueにします そしてbutton.pointerStyleProviderを使って カスタマイズします

    丸括弧内にあるのは システムが提案するエフェクトや形です それはボタンの見た目や大きさ コンテンツをもとに設定されてます

    このいずれかをカスタマイズするか 完全に置き換えて 新しいスタイルを作り上げることができます

    いくつか例を見る前に 少し脱線して ポインタのスタイルを説明します

    APIを使ってポインタの見た目を修正するには UIPointerStyleに修正を書き込みます

    スタイルには2種類あります

    1つ目はコンテンツエフェクトです

    コンテンツエフェクトはアプリケーションの 画面上でポインタを変形させ いくつかの視覚処理を適用します

    バーボタンに適用する ハイライトのエフェクトがその例です ポインタが角丸長方形に変形したり ボタンの下に消えたり 微細なパララックスエフェクトを 適用したりします

    ビューに適用された視覚処理を 記述するUIPointerEffectや ポインタの変形を記述する UIPointerShapeからスタイルが構成されます

    このエフェクトを指定するためには UIPointerStyleに ハイライトや角丸長方形を ポインタの形として組み込みます

    2つ目はシェイプカスタマイゼーションです UIPointerShapeや UIAxisマスクに記述します

    適用するとポインタはその形に変更され アクティブな範囲内で 移動する方向を紐付けされます

    このいい例がテキストのポインタの動作です shapeにはvertivalBeamを constrainedAxesにはverticalを記述します これでポインタがテキスト上を 水平に動くように見せます

    コントロールのAPIや ポインタのスタイルの基本概念を 既存のアプリケーションに適用する方法を ジョーイに説明してもらいましょう ジョーイ?

    了解です モハメド 私が使っているQuilt Simulatorという アプリケーションを紹介します このアプリケーションを開発して 私はキルト作りを学びました ここまでに学んだことを復習させてください

    まずはじめに右下にあるボタンを見てください 簡単に真っすぐ縫えるように モードを切り替えてくれます ハイライトを使っているようですが エフェクトのサイズが合っていません Xcodeの画面に戻って修正してみましょう

    既にポインタのインタラクションが 有効になっていて デフォルトのエフェクトが付与されています pointerStyleProviderを追加して 定規マークのボタンの形を直します

    1文目のrectにボタンの適切な大きさと 座標を設定します

    そのrectを提案されたエフェクトの 対象プレビューの空間座標に変換します

    最後に提案されたエフェクトを使う スタイルに戻せば rectを基にポインタの形が改善されます 修正結果を見てみましょう

    よくなってます ボタンが正しく表示されています

    次に右上にある糸の選択ボタンを 見てみましょう このボタンは現在選択している 糸の色を変更できます

    リフトエフェクトを使うために このバーボタンは既にカスタマイズしてあります 少しおかしい感じがします ポインタが近づくと ボタンの下がぼやけたように見えます これでは見づらいです Xcodeに戻ってこの問題を解決しましょう

    UIBarButtonItemがあるので 既にエフェクトが設定されています pointerStyleProviderを 修正しますが 今回はデフォルトから リフトエフェクトに変更します これでは不十分なので形を正確にしましょう

    新しく実装したUITargetedPreviewを リフトエフェクトの使用に合わせます ビューやターゲットまたは 上で作ったプレビューの値を作成しました

    shadowPathプロパティのパラメーターには ボタンの外周に合うパスをセットします

    最後に記述するのは リフトエフェクトを使ったポインタスタイルや ボタンに合うポインタの形です

    iPadに戻って確認してみましょう

    よくなっています ポインタを近づけると 糸巻きのアイコンがはっきりしています

    モハメドに話を戻します

    ありがとう ジョーイ 今度はカスタムUIについて話しましょう

    カスタムUIにポインタの動作を付け加えるなら ユーティリティーやユニークな値を 加えることに重点を置いてください

    Quilt Simulatorアプリケーションでは 画面中央に広いエリアがあります 縫い始めと終わりを クリックすれば縫い目ができます カスタムのポインタ動作を利用して エクスペリエンスを向上することができます 機能を2つ拡張してみましょう まずはキルトのエリアをホバーする時の ポインタの形を変えます これは縫い始める場所を確認するためです

    キルト初心者のためにガイドモードを追加して ポインタが垂直な軸に沿うようにします 縫い目を水平に保つことが簡単にできます

    これはすべてカスタムビューなので UIPointerInteractionを直接使います 他のUIinteractionでUIPointerInteractionの インスタンスを作りビューに追加します しかし他と違って インタラクションのデリゲートは任意です

    ポインタに適用したいエフェクトや 形の変更を指定するには UIPointerStylesを使います スタイルがアクティブになる箇所を 厳密に制御したいなら UIPointerRegionsも定義します 指定したスタイルを インタラクションに示すためです

    デフォルトでインタラクションは 全体のビューをカバーしています

    スタイルをデリゲートしていなくても インタラクションは自動的にポインタの エフェクトを全体のビューに適用します

    これは単純なケースではとても便利です エフェクトをビューに適用させる場合や エフェクトが関係ない場合です しかし我々のシナリオはもっと専門的です

    画面の特定の小さな範囲内での 動作を定義したいので UIPointerInteractionDelegateの regionFor requestメソッドを実装します

    このメソッドで新しい範囲を要求するのは インタラクションのビュー内で ポインタを移動する時です 実装するためにはガイドに対応する範囲で ポインタが動作するようにします

    ポインタがある範囲に入ったら インタラクションはスタイルを要求するために styleForRegionメソッドを呼び出します メソッドを実装して十字の形になるように シェイプカスタマイゼーションを設定します

    ではジョーイにその方法を 実践してもらいましょう

    モハメド 了解です ここでもQuilt Simulatorを 使って解説します まずは糸の色を選びキルトを縫い始めます パッチワークエリアで 縫いたい場所をクリックするだけです まずは黄色の糸を選びます

    UIScrollViewの機能を利用すると 2本の指で拡大できます

    そして何針か縫ってみます

    カスタムでポインタの形を指定して 精度の高いレーザーを利用すれば カスタムした範囲でユーザーを 効率的にアシストできます

    まずはカスタムしたポインタの インタラクションをビューに追加します

    新しいUIPointerInteractionを作って キルトの画面で動くように追加します

    styleFor Regionの デリゲートメソッドは実装済みです 初めの構文はhelperメソッドから取得した カスタムのBezier pathを設定し

    2つ目の構文はポインタの形を指定する UIPointerStyleを設定します さて見てみましょう

    とてもよくなりました 上質な糸のような自然な縫い目です では前に話した直線モードに戻りましょう 定規ボタンをクリックして有効にします

    そして何針か縫います

    とても簡単に すばらしい縫い目ができました しかしばらつきがあります ポインタは自由に動かせますが 縫い目は目盛りの上にだけ表示されています

    対処法を説明しましょう

    デリゲートメソッドを修正して ポインタが垂直に動くようにしているので ポインタはそれぞれの行に結びついています まずregionFor Requestの実装を追加して ガイドラインごとに違う範囲を指定します

    StraightLineStitchモードを使うと グリッド線を別の範囲に指定できます

    それ以外はデフォルトの範囲になります

    次にポインタの動きを垂直な軸に合わせます

    ガイドを使えば 十字キーは垂直に動くようになります それ以外は前と同じ動きです

    真っすぐ縫うために アプリケーションの機能を拡張しました ポインタを適当に動かしても垂直になる ガイドラインに従います どこにカーソルを進ませても 磁石のように戻ってきます これでデモは終了です モハメド

    ありがとう ジョーイ ポインタエクスペエンスを 仕上げるためのステップを紹介します

    ポインタエクスペリエンスを より良くするための方法がいくつかあります 1つはビューの周りに余白を指定することです ポインタの戻る力を増強して UIで重要な要素に作用しやすくなり― ボタンの端にたどり着く前に ポインタはボタンに戻ります

    これはポインタスタイルの効果が及ぶ エリアを拡大した結果です

    指定する範囲にも制限があります インタラクションのビューにある hittestable内でなければなりません ビューより大きな範囲にしたいなら ビューにヒットテストされていることを 確認しなければなりません

    ポインタの範囲を調整すれば エフェクトが変化する具合を制御できます リマインダーを例にしてみましょう ビューの見た目は分かれていますが ビュー間のポインタの移行は滑らかで 隙間でシステムのシェイプに 戻ることはありません

    隣接したポインタの範囲に インタラクションを付与しているおかげです

    複数のポインタの範囲やスタイルを調整する時 インタラクションをビューヒエラルキーの 一番上に置くのには意味があるのです UIの見た目を完璧に近づけ 全体を論理的に考えることができます

    この例ではインタラクションを 全体のビューに付与し デリゲートは 別のサブビューの範囲に指定しました

    さらにポインタのインタラクションに アニメーションを追加することもできます こうすれば役に立つ情報が提示できて エフェクト中のクラッタを減らすことができます

    UISegmentedControlで ポインタのセグメント間の移動を スムーズにする方法をお見せします

    アニメーションを調整するためには デリゲートにwillEnterや willExit regionを実装し animatorオブジェクトに アニメーションに付与します

    この例ではポインタが範囲にきたら 区切り線のビューをフェードアウトして 範囲から出たらフェードバックします

    詳しくはHuman Interface Guidelinesや 開発者向けドキュメントを参照してください この映像に関係するサンプルも確認してください 試す価値のあるいい例があります

    最上級のポインタエクスペリエンスを持つ iPadアプリケーションをビルドしてください 古典的な分野にこそ 高度なAPIを使うべきです コントロールやカスタムUIに 反応の良いポインタエフェクトを加えてください 最後に実装を洗練するために 少し手を加えてみてください そしてUIに驚きと喜びを与えてください

    ポインタを活用した アプリケーションの開発に期待しています

    • 6:04 - UIButton Pointer Effects

      // Enable the button's built-in pointer interaction.
      myButton.isPointerInteractionEnabled = true
      
      // Customize the default interaction effect.
      myButton.pointerStyleProvider = { button, proposedEffect, proposedShape -> UIPointerStyle? in
      		// In this example, we'll switch to using the .lift effect by creating a new
          // UIPointerEffect with the .lift type using the proposedEffect's preview.
          return UIPointerStyle(effect: .lift(proposedEffect.preview), shape: proposedShape)
      }
    • 7:05 - Pointer Content Effect

      // Create a UIPointerStyle that applies the .highlight effect. 
      
      // Outset the view's frame so the pointer shape has some generous padding around the view's contents.
      // Note that this frame must be in the provided UITargetedPreview's container's coordinate space. 
      // In the majority of cases (where the preview doesn't have a custom container), this is just the view's superview.
      let rect = myView.frame.insetBy(dx: -8.0, dy: -4.0)
      let preview = UITargetedPreview(view: myView)
      
      return UIPointerStyle(effect: .highlight(preview), shape: .roundedRect(rect))
    • 8:02 - Pointer Shape Customization

      // Create a UIPointerStyle that changes the pointer into a vertical beam. 
      
      let beamLength = myFont.lineHeight
      return UIPointerStyle(shape: .verticalBeam(length: beamLength), constrainedAxes: .vertical)
    • 21:31 - UIPointerInteraction Region Entrance Animation

      func pointerInteraction(_ interaction: UIPointerInteraction, 
                                willEnter region: UIPointerRegion, 
                                animator: UIPointerInteractionAnimating) {
      
           // Fade out separator when entering region.
           animator.addAnimations {
                self.separatorView.alpha = 0.0
           }
      }
    • 21:51 - UIPointerInteraction Region Exit Animation

      func pointerInteraction(_ interaction: UIPointerInteraction, 
                                willExit region: UIPointerRegion, 
                                animator: UIPointerInteractionAnimating) {
      
           // Fade separator back in when exiting region.
           animator.addAnimations {
                self.separatorView.alpha = 1.0
           }
      }
  • 特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。

    クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。

Developer Footer

  • ビデオ
  • WWDC20
  • iPadOSのポインタの作成
  • メニューを開く メニューを閉じる
    • iOS
    • iPadOS
    • macOS
    • tvOS
    • visionOS
    • watchOS
    Open Menu Close Menu
    • Swift
    • SwiftUI
    • Swift Playground
    • TestFlight
    • Xcode
    • Xcode Cloud
    • SF Symbols
    メニューを開く メニューを閉じる
    • アクセシビリティ
    • アクセサリ
    • App Extension
    • App Store
    • オーディオとビデオ(英語)
    • 拡張現実
    • デザイン
    • 配信
    • 教育
    • フォント(英語)
    • ゲーム
    • ヘルスケアとフィットネス
    • アプリ内課金
    • ローカリゼーション
    • マップと位置情報
    • 機械学習
    • オープンソース(英語)
    • セキュリティ
    • SafariとWeb(英語)
    メニューを開く メニューを閉じる
    • 英語ドキュメント(完全版)
    • 日本語ドキュメント(一部トピック)
    • チュートリアル
    • ダウンロード(英語)
    • フォーラム(英語)
    • ビデオ
    Open Menu Close Menu
    • サポートドキュメント
    • お問い合わせ
    • バグ報告
    • システム状況(英語)
    メニューを開く メニューを閉じる
    • Apple Developer
    • App Store Connect
    • Certificates, IDs, & Profiles(英語)
    • フィードバックアシスタント
    メニューを開く メニューを閉じる
    • Apple Developer Program
    • Apple Developer Enterprise Program
    • App Store Small Business Program
    • MFi Program(英語)
    • News Partner Program(英語)
    • Video Partner Program(英語)
    • セキュリティ報奨金プログラム(英語)
    • Security Research Device Program(英語)
    Open Menu Close Menu
    • Appleに相談
    • Apple Developer Center
    • App Store Awards(英語)
    • Apple Design Awards
    • Apple Developer Academy(英語)
    • WWDC
    Apple Developerアプリを入手する
    Copyright © 2025 Apple Inc. All rights reserved.
    利用規約 プライバシーポリシー 契約とガイドライン