[Swift]UndoManagerについて



(画像ソース:https://unsplash.com/photos/UWFnSfocJbA?utm_source=unsplash&utm_medium=referral&utm_content=creditShareLink)
状態がUpside downなのでこのイメージを追加しました...

学習の背景


ケース

  • アウトソーシングを処理し、図面に関連する論理を実施している.RedoおよびUndoの描画機能が必要であり、実施中に資料が見つかった.
  • 質問する

  • すべての描画順を保存しない->デバイス別メモリ
  • Redo、Undoを完了して書き直すと、正常に動作するはずです.
  • 解決する

  • は、よく知られているデータ構造によって実施されます.
  • 1. Queue

  • Queueを使用すると、図面のタッチをカスタマイズして実装するのは簡単で、数を指定するだけでいいです.
  • 2.LinkedList

  • のデータを追加または削除する場合、他のデータ構造に比べて相対的に自由です.以下のデータの前のデータに関する情報も提供しているので、redo機能とundo機能に非常に適していると思います.
  • 3. Ringbuffer

  • キューでは、少しカスタマイズしてRingBufferで格納されているデータ量を制限するだけでよい.
  • データ構造による直接実施を計画する過程で、
    公式ドキュメントを調べてみると、すでに関連機能を実現している対象があることがわかりました.
    このオブジェクトは、この記事のトピック「UndoManager」です.

    Task Manaement


    UndoManagerは、正式なドキュメントに対応する色付きサブドキュメントとして登録されています.
    (UnoManagerの親ドキュメントはTask Management)
    定義を見てみましょう
    Manage your app’s work and its interaction with the user and the system
    説明:ユーザーとシステム間のインタラクションとアプリケーションの動作を管理するオブジェクト.
    本書に記載されているTopicsは、次のとおりです.
  • Undo
    - class : UndoManager
  • Progress
    - protocol : PrograssReporting
    - class : Prograss
  • Opertaions
    - class : Operation
    - class : OperationQueue
    - class : BlockOpertaion
  • Scheduling
    - class : Timer
  • Activity Sharing
    - Increasing App Usage with suggestions Based on User Activities
    - Continuing User Activities with Handoff
    - Implementing Handoff in Your App
    - class : NSUserActivity
    - protocol : NSUserActivityDelegate
  • System Interaction
    - class : ProcessInfo
    - class : NSBackgroundActivityScheduler
  • User Notifications
    - protocol : NSUserNotificationCenterDelegate
  • Combine Integration
    - typealias : Published
    - typealias : ObservableObject
  • 内容を詳しく見た感じよりも、Task Managementに属する対象とは何かを見ればTask Managementがどのような役割を果たす対象なのかがわかるので、この記事を書きました.
    ここでは、このトピックUndoManagerについてさらに説明します.

    UndoManager


    A general-purpose recorder of operations that enables undo and redo.
    製品の取り消しとやり直しを許可するレコーダオブジェクト.
    ->やり直しと取り消しを許可するために+redo取り消し操作を管理するオブジェクトを記録することを説明します.
    class UndoManager: NSObject
    本書の概要を確認し、整理しました.
    Undo機能を使用するには、登録する必要があります.
    そこで,登録方法を実施した.このメソッドを使用して登録します.

    このメソッドは、オブジェクトの名前を指定し、モジュールを介して呼び出されるアクションを決定します.
    (サンプルファイルにコメントを作成します.)
    Undoが登録された後、undo()という名前のUndoを実行する方法を使用することができる.
    このメソッドは、元に戻す操作を実行することによって、元に戻すことを呼び出しポイントの前の位置に戻します.
    Undoが呼び出されると、UndoManagerは、redo()を呼び出すために、元に戻す前の状態を自動的に保存します.UndoManagerはUIインタラクションのデフォルトオブジェクトです.
    たとえば、UImitでtext viewで作成または作成する場合に使用できるはずです.
    もちろん、UndoManagerは、通常の状態管理としても使用することができる.
    たとえば、コード行の最後のコマンドを元に戻すことも、ネットワーク・ライブラリで要求されたコマンドを元に戻すこともできます.
    要旨:UndoManager==状態制御者
    かなり簡単に使えます.
  • 登録
  • コール
    △もちろんグループ分けの方法もありますが、後で機会があれば処理します.
  • 次のリンクからプロジェクトファイルを取得できます.
    https://github.com/kipsong133/UndoManager_Example/tree/main