カテゴリー: iOS

【Swift】iOS15UIMenuの挙動変更について

はじめに

こんにちは、suzukiです。ハーフモーダルの記事をみてiOS15についてあまりきにできていなかったので、少し調査をかねて色々触ってみました。その中で今回はUIMenuについて触れていきたいと思います。

UIMenuとは

Safariで画像を長押しした際にのようなコンテキストメニューを表示する機能。
iOS13から追加された機能です。
また、アクションシートと似ているUIです。デフォルトだと長押し等を行うと表示される機能です。
iOS14ではナビゲーションバーの戻る機能長押しで特定の画面に直接戻る機能の提供に使われてたりもします。
意外と気付かないけどこっそり実装されている機能だったりします。

UIMenuの実装

それでは簡単にMenuを表示してみましょう。StoryBoardでボタンを追加します。
あまり触れませんが、Xcodeの見た目も少し変わってますね。拡張子表示されなくなったの、MACっぽいですね。

ViewControlelr

//
//  ViewController.swift
//  MenuCheck
//
//  Created by MacBook007 on 2021/08/30.
//

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var showMenuButton: UIButton!
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        let destruct = UIAction(title: "Destruct", attributes: .destructive) { _ in }
                
        let items = UIMenu(title: "More", options: .displayInline, children: [
            UIAction(title: "mic", image: UIImage(systemName: "mic"), handler: { _ in }),
            UIAction(title: "camera", image: UIImage(systemName: "camera"), handler: { _ in }),
            UIAction(title: "video", image: UIImage(systemName: "video"), handler: { _ in })
        ])
        let subItems = [
            UIAction(title: "画像1", image: UIImage(systemName: "photo"), handler: { _ in }),
            UIAction(title: "画像2", image: UIImage(systemName: "photo"), handler: { _ in }),
            UIAction(title: "画像3", image: UIImage(systemName: "photo"), handler: { _ in }),        ]
        //ボタンタップですぐ表示設定
        let photo = UIMenu(title: "photo", children: subItems)
        showMenuButton.showsMenuAsPrimaryAction = true
        //itemの追加
        showMenuButton.menu = UIMenu(title: "", children: [items,photo,destruct])
    }

    @IBAction func menuButtonPushed(_ sender: Any) {
    }
    
}

動作確認

実際に動かすとこんな感じです。より直感的に要素へのアクセスができるようになっているかと思います。
iOS15

iOS14.5

さいごに

新しい機能を使うタイミングがすくないですが、キャッチアップは続けていきたいですね。
UIMenuはOS側が勝手に使えるようにしたりと、よくも悪くも変更の影響を強く受ける気がします。

おすすめ書籍

suzuki

シェア
執筆者:
suzuki
タグ: Swift

最近の投稿

Goの抽象構文木でコードを解析する

はじめに Goでアプリケーショ…

14時間 前

フロントエンドで動画デコレーション&レンダリング

はじめに 今回は、以下のように…

4週間 前

Goのクエリビルダー goqu を使ってみる

はじめに 最近携わっているとあ…

1か月 前

【Xcode15】プライバシーマニフェスト対応に備えて

はじめに こんにちは、suzu…

2か月 前