ドローイングモデル


iOS と OS X で描画すると、二つの技術のパスの一つに従っており、ビューは要求に寄ってその外観を更新するモデルに基づいています。アプリのコンテンツを描画するには、OpenGL またはプラットフォームのネイティブレンダリング機能のいずれかを使用できます。



OpenGL レンダリングは、多くの場合、アプリケーションフレームワークの UIKit フレームと AppKit で定義されたビュークラスを利用します。その場合には、描画モデルのいくつかの側面は、ネイティブレンダリングの場合と似ています。ただし、OpenGL アプリは、ビューに基づいている必要はありません。



注意: 以下の情報はネイティブレンダリングの描画モデルの側面について説明します。OpenGL と OpenGL ES の詳細については、OpenGL Programming Guide for Mac で OpenGL のウェブサイトを参照してください。



必要な時にはビューは drawRect : メソッドで自分自身を描画します。


描画モデルの主要な要素は、オンデマンドでコンテンツを更新することです。ビューは、drawRect: メソッドでそのコンテントを描きますが、そのメソッドはビューの基底クラス(UIViewNSView) が宣言したもので、ビューのサブクラスがオーバーライドした物です。矩形がメソッドに渡され、再描画が必要なビューの領域を識別します。ビューが最初ウインドウに現れた時、矩形はビューの境界と一致し、ビューは、そのすべてのコンテンツを描画します。その後、ビューは、必要なときだけ自分自身を描画し、変更された自身のその部分だけを描画します。


drawing_model



いくつかのアクションはビューの更新を引き起こせます

Core Animation レイヤーの存在は、ビューの描画動作に影響を与えます。レイヤーは、ビューに、余分な描画を必要とせずに操作することができるビットマップのコンテンツをキャッシュさせます。iOS 内のすべてのビューはレイヤにより裏打ちされています。OS X では、ビュー階層でのサポートを有効にすることで、レイヤーの裏打ちを選択して下さい。OS X では、また、レイヤーに裏打ちされたビューで最も効率的な再描画ポリシーを指定することもできます。


メインイベントループのサイクルの終わりに、ウィンドウは、ビュー階層を下に進み、それらのの drawRect: メソッドを呼び出すことによって、自分自身を描画するために、これらのビューを要求します。


グラフィックスコンテキストは、図面環境を設定


UIViewNSView は、drawRect: メソッドが呼出される前に、その描画環境を自動的に設定します。(AppKit フレームワークでは、描画環境を構成する事は、ロッキングフォーカス と呼ばれています。) この構成の一部として、ビュークラスは、現在の描画環境のグラフィックスコンテキストを作成します。


このグラフィックスコンテキストは、描画システムが必要とする情報を含む Quartz オブジェクト(CGContext) で、適用しようとする色、描画モード(一筆または塗りつぶし)、線幅とスタイル情報、フォント情報、および合成オプションなどの情報を含みます。(AppKit では、NSGraphicsContext クラスのオブジェクトは CGContext オブジェクトを覆い包みます。) グラフィックスコンテキストオブジェクトは、ウィンドウ、ビットマップ、PDF ファイル、またはその他の出力デバイスに伴われており、その実体の描画環境の現在の状態に関する情報を保持しています。ビューは、ビューのウィンドウに伴われているグラフィックスコンテキストを使用して描画します。ビューの場合、グラフィックスコンテキストは、ビューの境界に一致するようにデフォルトのクリッピング領域を設定し、ビューの境界の原点にデフォルトの描画の原点を置きます。


描画はビューローカル座標系で


ビューは、そのローカル座標系で自身を描画します。ビューの境界(bounds) プロパティは、この座標系での点の位置を定義するのに役立ちます。


現在の変換行列(CTM) を変更することにより、デフォルトの座標系を変更できます。CTM は、デバイスの画面上の点に、ビューの座標系の点をマップします。CTM を変更することで、サイズ、向き、および、スーパービューやウィンドウへの座標系での相対位置を変更することができ、それによって、スケーリング、回転、またはビューの移動をします。


描画コマンドは、ユーザー座標空間として知られている固定スケールの描画空間への参照を行います。オペレーティング·システムは、対応するターゲット·デバイスの実際のピクセルにこの描画空間座標単位でマッピングします。このように、デバイスがサポートする任意の解像度にビューの尺度によってベクトルのコマンドが発行されます。これらのコマンドは、ベクトルベースの​​描画に必要な精度を取得するために浮動小数点値を用いて描画座標を指定します。


前提条件の記事


ビューオブジェクト

座標系


関連記事

メインイベントループ


既知のディスカッション


ココアドローイングガイド


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

Quartz 2D 変形

BezierPathLab




目次
Xcode の新機能

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










    トップへ










    トップへ










    トップへ










    トップへ










    トップへ










    トップへ