ElectronをApp Storeに申請しました

昨年から作ってる気がするiPhoneアプリをようやくApp Storeに申請しました。

Electronはいわゆるテノリオン系の楽器アプリです。マトリックス上のLEDを模したボタンをタップする事でパターンを作って、パターンを切り替えたり、シーケンサーのように並べ替えたりしてソングを作成することができます。

ss1

指でマトリックスをなぞってつるつるとパターンを作成するのはけっこう気持ちがいいです。設定でデバイスをシェイクする事でパターンをランダムに生成することもできるので、適当にやってるだけで思いもよらない曲に出会えるかもしれません。

App Storeの審査が無事通ることを祈りつつ。

キーボードの表示のタイミング

テキストフィールドを持つページへの遷移があって、そのタイミングでキーボードも表示しようとすると、うまいことやらないとページ遷移自体も遅くなるし、なんだかよろしくない。

最初、viewWillAppearでbecomeFirstResponderを呼んでたんだけれど、これだと上記のようにキーボードの表示処理が終わるまでビューが表示されない。

- (void)viewWillAppear:(BOOL)animated {
	[super viewWillAppear:animated];
	[textField becomeFirstResponder];
}

で、viewDidAppearに変更してみた。これだと、テキストフィールドを含むビューに遷移してからどっこいしょという感じでキーボードが表示される。二段階になっちゃったけれど、最初に比べたらなんぼかまし。

- (void)viewDidAppear:(BOOL)animated {
	[super viewDidAppear:animated];
	[textField becomeFirstResponder];
}

キーボードのリソースの先読みみたいなのってないのかなー。

UITableViewをメニュー代わりにしてみる

ViewをLandscapeにすると、UITableViewが横に長くてなんだかもったいないなぁとか思っちゃう今日この頃ですがいかがおすごしですか?

Interface Builderをいじってて、UITableViewの幅を短くしてアニメーションと組み合わせればメニューのように使えるなぁと思ってちょろっとコード書いてみた。

絵的には以下のようになったんだけど、こういう使い方はありなのかしら。
たまには冒険するのもいいか。な。
な、な、な。

TableMenu

コード自体は大した事してないけど、UIViewの中にUITableViewを追加して、親のUIViewのポジションをUIViewのアニメーションでにゅるっと変化させる事で結構メニューっぽく見えるようになった。

- (IBAction)clickCloseMenuButton {
	CGRect frame = menuView.frame;
	frame.origin.x = -1.0 * frame.size.width;
	[UIView beginAnimations:nil context:nil];
	[UIView setAnimationDuration:0.3];
	menuView.frame = frame;
	[UIView commitAnimations];
}
 
- (IBAction)clickShowMenuButton {
	CGRect frame = menuView.frame;
	frame.origin.x = 0.0;
	[UIView beginAnimations:nil context:nil];
	[UIView setAnimationDuration:0.3];
	menuView.frame = frame;
	[UIView commitAnimations];
}

iPhone for everybodyキャンペーン申し込んだ

everybodyキャンペーンの機種代0円の方は無理だけど、パケット代の上限を5,985円から4,410円に下げる事は既存のユーザーも申し込む事ができる。

というわけで、ソフトバンクショップに行って来た。
電話番号と保険証を提示するだけで10分もかからずに申し込み完了。

一応内容の説明を受けたのだけれど、「新しいiPhoneへの機種変更はキャンペーンの適用解除とはならない」と明確に言われたのが印象的。ふーん、新しいの出るんだ。

キャンペーンの申し込み終了日が5月末までで、WWDC 2009が6月8日から開催されるというスケジュールを見てもなんとなく在庫処分?とか思ってしまう。

まあ先の事はわからないけど、あと2年間ソフトバンクのiPhoneに縛られる事にしよう。

UITableViewの編集後の更新

編集可能なテーブルがあって、編集操作を行って元のテーブルに戻る時、編集結果の反映とテーブルの選択状態の解除の順番がちょっと違うだけでも表示結果が微妙におかしくなる事に気がついた。

編集して帰ってくるだけなので、単純にUITableViewControllerのviewWillAppearで編集結果を反映させる処理を実行させているのだけれど、reloadDataを追加するだけだと選択状態の解除のアニメーションがまるっとなくなる。巷で聞いた話だと、テーブルの行の永続的な選択状態とかフィードバックが無いというのはNGらしく、この辺りの挙動がガイドラインに沿っていないという理由でリジェクトを食らったという事例もあるらしい。

これはダメな例。

- (void)viewWillAppear:(BOOL)animated {
	[self.tableView reloadData];
	[super viewWillAppear:animated];
}

選択状態を解除するのは[super viewWillAppear:animated];のお仕事なので、こいつを遅延して実行させるようにしてみた。

- (void)viewWillAppear:(BOOL)animated {
	if (self.tableView.isEditing) {
		[self.tableView reloadData];
		[self performSelector:@selector(refreshTable) 
			withObject:nil afterDelay:0.2];
	} else {
		[super viewWillAppear:animated];
	}
}
 
- (void)refreshTable {
	[super viewWillAppear:YES];
}

ちなみに、Safariのブックマークの編集は選択状態解除のアニメーションが実行されないけど、どうなんでしょうね。