アンドゥマネージャ


アンドゥマネージャは、フレームワークオブジェクトであり、オブジェクトの状態の変更を記録し、後でユーザーの要求に応じてそれらの変更を元に戻します。NSUndoManager クラスのインスタンスであるアンドゥマネージャは、アンドゥ操作とやり直し操作の両方の管理をしています。アンドゥ操作は、オブジェクトのプロパティへの変更を元に戻します:アンドゥ操作が行われた場合は、アンドゥ操作は、元の値を復元します。アンドゥ(取り消し) を実行し、操作をやり直す機能は、アプリケーションの、ユーザーが広範囲にデータを変更できるようにする、特に他と異なる機能です。


UIResponder(UIKit フレームワーク) の undoManager プロパティを介して、または(AppKit フレームワークの) NSResponderundoManager メソッドを呼び出して、アンドゥマネージャを取得できます。特定のコンテキストのためのプライベートなものを作成することもできますが、アプリケーションのすべてのウィンドウには、デフォルトのアンドゥマネージャが用意されています。


アンドゥとやり直しの操作は変更オブジェクトにメッセージ


アンドゥマネージャにアンドゥ操作を登録しなければなりません。アンドゥ・マネージャが操作を実行する場合には、登録時に供給されるいくつかの成分から構成されたメッセージを送信します。


アンドゥマネージャは、アプリケーションのメインイベントループなどの実行ループの単一サイクル内で発生したすべてのアンドゥ操作を集めます;アンドゥ操作を実行すると、サイクル中に発生したすべての変更をを元に戻します。アンドゥ操作を実行する場合は、アンドゥマネージャは、ユーザーが元に戻せるように、アンドゥされた操作を保存します。


undo_redo

アンドゥとやり直し操作はスタックに置かれる


アンドゥマネージャは、ファーストイン・ラストアウトのスタック上に、アンドゥとやり直しの操作を保存します。アプリケーションが最初にアンドゥ操作を登録すると、アンドゥ·マネージャは、アンドゥ・スタックに追加します。しかし、ユーザーがアンドゥ操作を要求するまでアンドゥスタックは、空のままです。それが起こるとき、アンドゥマネージャは、変更を元に戻す1つ以上のメッセージを作成·送信するためにアンドゥスタックに対する最上位の操作グループを使用します。


これらの操作は、再び1つ以上のオブジェクトの状態の変化を引き起こすので、オブジェクトはアンドゥマネージャと、元の操作から逆方向にこの時は新しい操作を登録します。アンドゥマネージャは、変更を現在取り消すので、アンドゥスタック上のアンドゥ操作としてこれらの操作を記録します。その後のアンドゥ操作は、アンドゥスタックから動作を引っぱて来てオブジェクトに適用し、アンドゥスタック上にそれらを置き直します。オブジェクトの状態への新しい変更は前の変更を無効にするので、新しいアンドゥ操作が登録されるが早いか、アンドゥ·マネージャは、アンドゥスタックをクリアします。


操作はアンドゥグループに合体されています


アンドゥマネージャは、アンドゥとやり直しの、完全に回復可能なアクションを表現するグループでの操作を収集します。グループは、典型的には、何らかの形で関連するプロパティを識別します。これは、アンドゥのとやり直しのスタック上に、項目などの操作のこれらのグループを格納します。ですが、単一のアクションでも、グループとしてパッケージ化する必要があります。NSUndoManager は、通常は実行ループのサイクル中に自動的にアンドゥグループを作成します。それがサイクルでアンドゥ操作を記録するように頼まれて初めて、新しいグループを作ります。次いで、サイクルの終わりに、グループを閉じます。追加の、ネストされたアンドゥグループを作成できます。


アンドゥとやり直しを要求する方法


NSUndoManager クラスを使用して、アンドゥ操作を登録する2つの方法を提供します。


変更されているオブジェクトのプロパティ用のアクセサメソッドでこれらのメソッドを頻繁に呼び出します。アンドゥや、やり直し操作を要求するには、NSUndoManager オブジェクトに undoredo メッセージを送ります。


アンドゥマネージャとレスポンダチェーン


レスポンダチェーンは、デフォルトのアンドゥマネージャが活動している時でも、アンドゥマネージャで重要な役割を果たしています。UIKit と AppKit フレームワーク(UIResponder または NSResponder) のいずれかでも responder クラスは、それぞれ undoManager プロパティや undoManager メソッドを宣言します。アプリケーションが、アンドゥイベントを受信すると、レスポンダクラスは第一レスポンダから始まり、そこから(undoManager プロパティまたはメソッドを介して) NSUndoManager オブジェクトを探してレスポンダチェーンを上がって行きます。レスポンダチェーンの最後に到達した場合は、ウィンドウオブジェクトがデフォルトのアンドゥマネージャーを作成し、返します。


デフォルトのアンドゥマネージャに加えて、特定のコンテキストのアンドゥマネージャが必要な場合は、レスポンダサブクラスは undoManager プロパティを実装するか、またはそれを作成して返すメソッドを実装できます。レスポンダサブクラスは、多くの場合、カスタムビューですが、それはまた、iOS では(それが第一レスポンダになることを確認する必要があります) ビューコントローラです。アンドゥマネージャを戻すには、OS X では、ウィンドウオブジェクトのデリゲートは windowWillReturnUndoManager: を実装できます。


アンドゥとやり直しを要求するためのユーザーインタフェース


ユーザーはさまざまな方法で、OS X と iOS でアンドゥとやり直し操作を要求します。Mac のアプリでは、ユーザーは、[編集(Edit)] メニューから[アンドゥ(Undo)] または[やり直し(Redo)] メニューコマンドを選択します。iOS アプリケーションでは、ユーザは、デバイスを振ります。振るのはコマンドとして機能するためで、UIApplicationapplicationSupportsShakeToEdit プロパティが YES に設定されている必要があり、アンドゥマネージャが適切な状態になっていなければなりません。これらの条件が適用される場合、アプリケーションは、アンドゥとやり直しのボタンでアラートビューを表示します。iOS と OS X の両方で、アンドゥとやり直しのコマンドに、特定のアクション名を付けることができますー例えば、Undo Color Change と。


前提条件の記事


レスポンダ・オブジェクト
アクセッサ・メソッド

関連記事

メインイベントループ

既知のディスカッション


アンドゥ・アーキテクチャ

サンプルコードプロジェクト

シンプル・アンドゥ
目次
Xcode の新機能

  • アニメーション
  • コア・アニメーションは力を与える
    アニメーション必要条件
    暗黙・明示にアニメーション
    Platform 毎の Core Animation 統合
  • アプリケーションオブジェクト
  • アプリ Object は外部 delegate に通知
    アプリはアプリオブジェクト持つ
  • コントロールオブジェクト
  • UIKitでActMessageがEventを決定
    AppKitでControlは複数のセルを持つ
  • 座標系
  • 座標系は異なる描画方向を持てる
    ウインドウとビューは独自座標系
  • ドローイングモデル
  • ビューは自分自身を描画
    グラフィックコンテクスト
    描画はビューローカル座標系で
  • イベント(iOS)
  • オブジェクトはビューに触れる指を表現
    タッチオブジェクトの配信は、定義された経路をたどる
    イベントを処理するために4つのメソッドをオーバーライド
    モーションイベントの処理
  • フォーマッタ
  • フォーマッタの設定と適用
    OSXでセルにフォーマッタを添付
  • メインイベントループ
  • アプリケーションオブジェクト取得
    コアオブジェクトはイベントに応答
  • アウトレット
  • ターゲットアクション
  • アクションメソッドは特定の形式
    ツールの使用でターゲット設定
    ターゲットアクションと OS
  • アンドゥ・マネージャー
  • 取り消しの操作はオブジェクトに
    取り消し操作はスタックに
    操作は取り消しグループに合体
    取り消しを要求する方法
    取消マネージャとレスポンダ
    取消を要求ユーザーインタフェース
  • ビュー階層
  • 表示プロパティは、階層の関係定義
    iOS ではウィンドウはビューです
  • ビュー・オブジェクト
  • ビューのの中核プロパティ
    ビューはアニメーションの本質
  • ストーリーボード
  • シーンは唯一のビュー·コントローラとそのビューに対応
    セグエが2つのシーン間の遷移を管理
  • ウインドウ・オブジェクト
  • ウインドウがイベント配布
    iOS のウィンドウオブジェクト
    OS X のウィンドウオブジェクト
  • ペーストボード
  • ペーストボードは多くの項目を保持
    ペーストボードの持続性
  • 環境設定
  • 各ユーザー設定はドメインに属する
    アプリは環境設定の選択を提示
    ユーザーデフォルト設定で OS X
  • レスポンダ・オブジェクト
  • ファーストレスポンダは最初に受信
    レスポンダチェーンと協調イベント










    トップへ










    トップへ










    トップへ










    トップへ










    トップへ










    トップへ