マウスのドラッグによりビュー上に矩形を描く
macOS 10.15.7 / Xcode 11.3.1 / Swift 5.0
概要
マウスのドラッグで矩形を描く。最初にクリックした位置を始点とし、そこからマウスをドラッグする。ドラッグに合わせて、始点とカーソルの位置を対角とした矩形が描かれる。
ここをクリックすると動画が開きます。
操作の流れ
マウスの操作でコンテントビューに描かれる矩形はビューオブジェクトである。ここでは、Rectangleクラスという名前の NSViewのサブクラスとして定義する。
マウスのクリック(mouseDown)によりRectangleオブジェクトを作成し、コンテントビューに貼り付ける。Rectangleクラスのイニシャライザでは、frameプロパティの始点(origin)にはマウスのクリックした位置をセットし、サイズ(size)はゼロとする。layerプロパティにより、ビューに青い枠線を描き、背景色を薄い青にする。
マウスのドラッグ(mouseDragged)により矩形の大きさを変える。始点とドラッグ中のカーソルを結んだ線が矩形の対角線になる。両端の二点の座標から矩形の幅と高さを割り出し、frameプロパティのサイズに設定すると、これに応じて矩形のサイズが変化する。刻々に発生するドラッグイベントに対して実行するので、マウスの移動に合わせて滑らかに矩形が拡大/縮小するように見える。
マウスアップ(mouseUp)の操作は、マウスドラッグの操作と同じである。
Rectangleクラス
マウスの操作によって描かれるビューオブジェクトの定義
マウスの操作は、次に掲げる MyViewクラスが行う。マウスダウンによりイニシャライザを起動し、ビューオブジェクトを作成する。マウスドラッグ及びマウスアップにより updateメソッドが起動し、ビューオブジェクトのサイズを変更する。
ドラッグの方向によりビューオブジェクトの始点を変更する。ビューオブジェクトは、矩形の左下の角を始点として、幅は x軸を右方向に、高さは y軸を上方向に伸ばした形になる。そのため最初にクリックした位置から、ドラッグする方向によってビューの始点を変える必要がある。
操作は次の4パターンに分かれる
- 始点から右上に向かえば、始点は変わらない
- 始点から左上に向かえば、始点は x軸を左方向に移動する
- 始点から左下に向かえば、始点は x軸を左方向に y軸を下方向に移動する
- 始点から右下に向かえば、始点は y軸を下方向に移動する