ドキュメント

iPadアプリをMac向けに最適化する

macOSのシステム機能を活用してiPadアプリをMac向けに最適化することで、より自然なユーザー体験をMac上で実現します。

最新の英語ドキュメント

Optimizing Your iPad App for Mac

概要

iPadアプリのMacバージョンでは、追加の作業を必要とせず、macOSに搭載されている以下のような多くのシステム機能に対応しています。

  • アプリのデフォルトのメニューバー

  • トラックパッド、マウス、キーボードによる入力

  • ウインドウのサイズ変更およびフルスクリーン表示

  • Macスタイルのスクロールバー

  • コピー&ペースト

  • ドラッグ&ドロップ

  • システムのTouch Barコントロール

また、追加のシステム機能を活用することでアプリ機能をさらに強化することができます。

メニューバー項目の追加

アプリのMacバージョンには、標準のメニューバーが自動的に含まれます。UIMenuBuilderを使うと、メニュー項目を追加したり削除したりしてカスタマイズできます。詳しくは、「メニューバーおよびユーザーインターフェイスへのメニューとショートカットの追加」を参照してください。

環境設定ウインドウの表示

Macアプリでは通常、ユーザーが環境設定ウインドウを表示して、アプリごとの設定を管理できます。ユーザーは、アプリメニューの「環境設定」メニュー項目を選択して、このウインドウを表示します。アプリに設定バンドルが含まれている場合、システムによって自動的にアプリの環境設定ウインドウが提供されます。詳しくは「環境設定ウインドウの表示」を参照してください。

プライマリビューコントローラへの半透明の背景の適用

Split Viewコントローラを使うiPadアプリは、macOSで実行するとMacスタイルの縦の分割表示になります。ただし、iPadアプリをMac上でより自然に見せるには、デスクトップをぼかしてプライマリビューコントローラの背景に溶け込ませる半透明のエフェクトを適用します。これを行うには、Split ViewコントローラのprimaryBackgroundStyleUISplitViewController.BackgroundStyle.sidebarに設定します(リスト1を参照)。

リスト1 プライマリビューコントローラへの半透明の背景の適用

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {


    let splitViewController = window!.rootViewController as! UISplitViewController
    let navigationController = splitViewController.viewControllers[splitViewController.viewControllers.count-1] as! UINavigationController
    navigationController.topViewController!.navigationItem.leftBarButtonItem = splitViewController.displayModeButtonItem
    
    // Add a translucent background to the primary view controller.
    splitViewController.primaryBackgroundStyle = .sidebar
    
    splitViewController.delegate = self
    
    return true
}

ビューでのポインタ検出

Macユーザーは、テキストフィールドの選択やウインドウの移動といったアプリ操作にポインタを使います。ユーザーがUI要素の上にポインタを動かした時に、その要素の外観が変わる必要があります。たとえば、Webブラウザでは、リンクの上にポインタを置くとリンクがハイライトされます。

ユーザーがアプリのビュー上でポインタを動かした時、これを検出するには、そのビューにUIHoverGestureRecognizerを追加します。これによってアプリは、ポインタがビューの領域に入った時、領域から出た時、またはビュー上で動いた時にそれを検知できます。

リスト2 ポインタがボタン上に動いた時にボタンのデフォルトカラーを赤に変更

class ViewController: UIViewController {


    @IBOutlet var button: UIButton!


    override func viewDidLoad() {
        super.viewDidLoad()


        let hover = UIHoverGestureRecognizer(target: self, action: #selector(hovering(_:)))
        button.addGestureRecognizer(hover)
    }


    @objc
    func hovering(_ recognizer: UIHoverGestureRecognizer) {
        switch recognizer.state {
        case .began, .changed:
            button.titleLabel?.textColor = #colorLiteral(red: 1, green: 0, blue: 0, alpha: 1)
        case .ended:
            button.titleLabel?.textColor = UIColor.link
        default:
            break
        }
    }
}

関連項目

アプリサポート