「七瀬ふたたび」またNHKでリメイクしてたな。ランニング中、観てました。来週も走るか?
 今回はジュブナイルじゃなかったんで、かわいいテレパスの七瀬が、向かい側に座った男の、自分を裸にする妄想をいやおうなしに読み取ってしまうシーンも、ゆるいなりに「実装」されておりました。
 以前、赤塚不二男がコミカライズされた時もちゃんと描いてたな。「七瀬ふたたび」じゃなく「家族八景」の方だけど、つーか個人的には亡き藤子F不二雄の絵柄で見てみたかった。最近、「三丁目のサテンドール」の清原なつのがコミカライズした方は未読。

 というヲタな話をだらだらに漏らしながらコアアニメーションの話。
 当初の「iPhoneアプリ開発、その(11)」でのChimpanzeeゲームの仕様では、最初に押すべきボタンと順序をしばらく表示して、その後のっぺらぼうのボタンを出すわけですよ。
 この、しばらくってのが問題。コアアニメーション使ってやれないことはなさそうだけど、とんでもなくめんどくさそうじゃん。やりたくねーっす。
 で、思ったのが、以前「クォーツの世界」で使ったNSTimer使えねーかな...

 使えました。

 とりあえず、サンプル上げるのは次回ということで、まずは、この前のChimpanzee-01の説明。というかメインソースChimpanzeeGameViewController.mの説明ね。

 - (IBAction)respondToButtonClick:(UIButton*)sender

での

 [self start:@"Faled!"]; // 「間違い」のアラート



 [self start:@"Complite!"]; // 成功というアラートを表示

は、作ってる最中にアラートって、ちょっとメッセージが違うだけで、あと、ほとんど同じじゃんと思って

 - (void)start:

に引数

 (NSString*)message

を追加して使い回すことにした結果です。なので

 - (void)viewDidLoad

でも、この新しい

 - (void)start:(NSString*)message

を呼ぶようにしている。
で、このviewDidLoadでおこなってる

 static const int BUTTON_WIDTH = 80;
 static const int BUTTON_HEIGHT = 80;
 static const int BUTTON_MERGIN = 10;



 bt.frame = CGRectMake(h * (80 + 10) + 10,
  v * (80 + 10) + 10,
  80, 80);

て書くより

 bt.frame = CGRectMake(h * (BUTTON_WIDTH + BUTTON_MERGIN) + BUTTON_MERGIN,
  v * (BUTTON_HEIGHT + BUTTON_MERGIN) + BUTTON_MERGIN,
  BUTTON_WIDTH, BUTTON_HEIGHT);

てほうが、やってることが明示的にできるのと、後から変更がやりやすいため。
ボタンとボタンの幅を20にしてみようとか思えば

 static const int BUTTON_MERGIN = 20;

てやって再ビルドすれば済む。てかMERGINじゃなくMARGINですな。
そういう意味では

 for (int v = 0; v < 3; v++) {
  for (int h = 0; h < 3; h++) {

なんかも

 for (int v = 0; v < BUTTON_V_COUNT; v++) {
  for (int h = 0; h < BUTTON_H_COUNT; h++) {

として注釈付きで

 static int BUTTON_H_COUNT = 3; // ボタンの横の数
 static int BUTTON_V_COUNT = 3; // ボタンの縦の数

とすると、なお良しか...

 - (void)start:(NSString*)message

でやってる

 clickSquence[0] = 2;
 clickSquence[1] = 8;
 clickSquence[2] = 6;
 clickSquence[3] = -1;

が、押し順の設定で、ここを

 clickSquence[0] = 2;
 clickSquence[1] = 6;
 clickSquence[2] = -1;

てやれば、2 → 6 の順にボタンを押すことになるし

 clickSquence[0] = 4;
 clickSquence[1] = 2;
 clickSquence[2] = 1;
 clickSquence[3] = 7;
 clickSquence[4] = -1;

なら 4 → 2 → 1 → 7 の順にボタンを押すことになる。
ここが本来、respondToButtonClickの判定部分も含め

 ChimpanzeeExaminer

が作る部分となる。
その後でやってるstringWithFormatやstringByAppendingStringでのNSString操作は

 2 → 8 → 6

という文字列を作る作業。アラートにこの文字列を出させて、あとはとくにやることないので

 - (void)alertView:(UIAlertView *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex

は、なにもしません。この場合、UIAlertViewのinitWithTitleのdelegateにはNULLを指定するのが正解なのかも...
ま、そこらへんは各自で実験してちょ。
以下次回。

 ま~、ソース無くても、NSTimerの使い方は「クォーツの世界」でわかるし、ボタンの消し方はレイヤーの時と同じ

button.hidden = TRUE;

だし、自力でなんとかできる人はできるよね。