dnjiro’s 9VAe blog

誰でもアニメが作れる無料ソフト9VAeきゅうべえ開発者のブログ

9VAeきゅうべえカスタムビューを作ってみる

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

 

ついに原因に到達。

 

stackoverflow.com

 

UIImageView からカスタムビューを作ると呼ばれないらしい。

 

確かに、UIViewに変更すると、drawRectが呼ばれるようになった。

しかし、imageがないので画像が表示されない。自分で作らないといけないのかー。

 

lab.dolice.net

 

初期化ルーチンは以下を参考に作成。

カスタムUIViewクラスの初期化処理 – なんでもやりたい

 

タイマーと自分の描画ができるようになり、画面は以下のような状態になった。

f:id:dnjiro:20170830180329p:plain

 

前回よりも後退したように見えるが、1秒ごとに画面が変わるところが進歩。

 

次は、上の画面から黒い部分をなくす。

 

QvaeImageView は、Imageじゃなくなったので、QvaeView に変更するか。

あと、タッチイベント処理を、QvaeViewの中に移してみよう。