9VAeきゅうべえiPad版作成日記。
今回は、タイマー描画を導入するために、カスタムビューを作り始めたところまで。
今までの経緯は、まずiPadアプリの作り方を勉強するために、お絵かきをするサンプルプロジェクトを入手し、タッチイベントの処理方法を勉強した。とりあえず、9VAeLibを合体させて、9VAe画面を表示させるとこまで作った。
いつものように、次の方針でやる。
1。必ず動作する状態でプロジェクトを作っていく。
2。必要になる基礎技術が全部動作確認するまでは、細かい部分は作らない。
1。は重要。理解不足でも、何か作業して動かなくなったら、その作業が間違っていると判断できる。動作するサンプルの改造から始めていくことが重要だ。
今回確かめたいのは、iOSでアニメーションを表示する方法だ。iOSはいろんな仕組みを提供してくれているが、9VAeは、独自なので、自分で画面を描画しないといけない。
画面を再描画させるには、setNeedsDisplay を呼ぶことはわかったが、タイマーでこれを呼んでも、サンプルプロジェクトを何回も描画させることができなかった。
どうも、標準的なやり方では、自力描画ができないようなので、UIImageViewを改造した、QvaeImageViewというカスタムビューを作り、もう少し細かく処理を書いてみることにした。
まず、QvaeImageView.h とQvaeImageView.m というファイルを、サンプルを真似して作成。サンプルのメイン画面を、UIImageView からQvaeImageViewに差し替えた。
StoryBoard(リソースエディタ)の中のメイン画面も、QvaeImageViewに変更。メイン画面を選択し、右側のタブを切り替えていくと、オブジェクトの種類がUIImageViewになっていたので、それを、QvaeImageViewに差し替えるとちゃんと動くようになった。ここまでの作業は正しいと思われる。
drawRectを差し替えると
drawRectメソッドをオーバーライドして背景にパターンを適用する - Dolice Lab
を参考に drawRectをオーバーライドしてみたが、呼ばれていないみたいだ。なぜ?
時計アプリのやり方を入れてタイマーの動作を確認。
snippets.feb19.jp | THE_PROGRAMING_TIPS_AND_CODING_MEMOS
タイマーで文字を変更すると、画面の時計はちゃんと動いた。文字はOSが書いているのでOK
では自分で描く場合はどうするのか? アナログ時計を調査
snippets.feb19.jp | THE_PROGRAMING_TIPS_AND_CODING_MEMOS
ついに原因に到達。
UIImageView からカスタムビューを作ると呼ばれないらしい。
確かに、UIViewに変更すると、drawRectが呼ばれるようになった。
しかし、imageがないので画像が表示されない。自分で作らないといけないのかー。
初期化ルーチンは以下を参考に作成。
カスタムUIViewクラスの初期化処理 – なんでもやりたい
タイマーと自分の描画ができるようになり、画面は以下のような状態になった。
前回よりも後退したように見えるが、1秒ごとに画面が変わるところが進歩。
次は、上の画面から黒い部分をなくす。
QvaeImageView は、Imageじゃなくなったので、QvaeView に変更するか。
あと、タッチイベント処理を、QvaeViewの中に移してみよう。