ASCII倶楽部

このページの本文へ

Swift Playgroundsで学ぶiOSプログラミング 第22回

いつ起こるかわからない「出来事」に対処する

イベント処理とグラフィック

2017年01月09日 17時00分更新

文● 柴田文彦 編集●吉田ヒロ

  • この記事をはてなブックマークに追加
  • 本文印刷

 今回も「Shapes」テンプレートを選んで作成したプレイグラウンドを使って進めます。今回のメインのトピックは「イベント処理」です。単に「イベント」と言えば、普通はなんらかの「催し物」を想像するでしょう。しかしイベント処理のイベントはちょっと違います。どちらかというと、いつ起こるかわからない「出来事」に近い意味です。つまりイベント処理とは、何か事が起こったときに、それに対処するということです。

 スマホ用をはじめとして現在のアプリは、基本的にユーザーが何か操作をすると、それに応答するかたちで動作します。この場合、ユーザーの操作がイベント、つまり対処すべき出来事ということになります。このようにして動作するプログラムを「イベントドリブン」などと言います。「イベントによって駆動される」という意味です。

 イベントがどんなものかはわかったとして、それとグラフィックとどんな関係があるのかと疑問に思われるかもしれません。実はイベントとグラフィックは大いに関係があるどころか、現在のアプリの根幹を成す二重らせん構造のような、切っても切れない関係なのです。今回は、そのあたりを明らかにしていきましょう。

 これまでに、縁、直線、長方形といった図形オブジェクトを作成し、その属性によって、それらの図形の大きさ、位置、色などを設定する方法を学んできました。また、属性を連続的に変化させることで、一種のアニメーションの表示が可能であることも試しました。

 図形オブジェクトには、イベント処理のためのファンクションを定義する機能があります。そうしたファンクションも、広い意味ではそれぞれの図形オブジェクトが備えている属性の一種と考えられます。

 こうしたイベント処理を扱うファンクションは、一般に「コールバック」などと呼ばれています。これは、アプリが自ら呼んで使うためのものではなく、システム側から呼び出してもらうために用意しておくものだからです。ここでのシステムとは、iPadのタッチ画面に対するユーザーの操作を監視しているiOSであり、起動中のアクティブなアプリとしてiOSから操作情報を受け取るSwift Playgroundsのそのものです。プレイグラウンド上で作成したプログラムは、Swift Playgroundsを含むシステム側から見ると、1つのアプリとして動作していることになります。そして、自分が設定したコールバックによって、必要なイベントを受け取ることができるのです。

 ユーザーがiPadの画面を操作する場合を考えると、その対象となるのは、ほとんど画面に表示されたなんらかの「図形」です。以前のiOSなら、ボタンやスイッチなど、現実の「物」を模した図形を操作する感覚を演出していました。今では、かなりシンプルになっていますが、リンクのようなテキストでも、やはり一種の図形と考えられます。

 Shapes環境で描くことのできる図形オブジェクトには、ユーザーが図形にタッチしたり、さらにそのままドラッグしたりした際に発生するイベントを受け取るファンクションが備わっています。それらの基本形を以下に示します。

onTouchCancelled { code }
onTouchCancelled(handler: () -> Void)
onTouchDown { code }
onTouchDown(handler: () -> Void)
onTouchDrag { code }
onTouchDrag(handler: () -> Void)
onTouchUp { code }
onTouchUp(handler () -> Void)

 全部で8個挙げましたが、1種類のイベントについて2パターンずつあるので、イベントの種類は4つです。2つのパターンとは、その場にコードを書くパターンと、イベントに対する処理を記述した別のファンクションを指定するパターンです。機能的にはほとんど同じと考えていいでしょう。前回のアニメーション機能のanimateにも、同じような2パターンがあったことが思い出されます。

 4種類のイベントは、「タッチがキャンセルされた」「タッチされた」「ドラッグされた」「指が画面から離された」というものです。このうちタッチのキャンセルは、ユーザーの操作によってはできそうもありません。例えばiPhoneなら、タッチ操作中に電話がかかってきたといった外部要因によって、ユーザーの操作そのものがキャンセルされます。

 今回は、Swift Playgroundsではほどんと起こりそうもない「キャンセル」のイベントは無視して、残りの3つのイベントを扱います。

カテゴリートップへ

この連載の記事

ASCII倶楽部の新着記事

会員専用動画の紹介も!