忍者ブログ

[PR]

2025年03月04日
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

ビデオガイド

2009年01月18日
ホームページにビデオガイドを作っています。まだ全項目を網羅していませんが、並んでいるビデオのタイトル(予定)を見るだけでもこのソフトがどんなものかは把握できるのではないでしょうか。ちなみにこのソフト、無事に発売になったなら、発売開始後1週間限定で半額セールを行います。なお、通常価格は1,200円の予定です。

Tiny3Dビデオガイド(日本語)
PR

Tiny3D

2009年01月15日
いろいろ完全放置で作っていたソフトですが、ようやく納得のいく状態になったので、アップロードしました。iPhone / iPod touchは、OpenGL ESを使って3Dのグラフィックが扱えます。それで3D表示を利用したゲームは多数出ています。でも、自分で3Dのグラフィックを作れますよってソフトは無いなと思ったところで、創作意欲のスイッチが入ってしまいました。その結果、出来てしまったソフトです。

sse001.png 一言で言えば、3Dグラフィックエディタです。3Dの空間内に基本図形を組み合わせて様々なオブジェクトを制作することができます。作ったオブジェクトはタッチパネル操作で回転させたり、拡大縮小したり、視点を平行移動させたりできます。あくまでお手軽に3Dグラフィックを作ることが目的のため、テクスチャは使えませんし、ライティングもサポートしません。それぞれのオブジェクトにアニメーションを組んで動かすといったことも、操作が複雑になりすぎるためサポートしません。ただ、1軸指定での自動回転はできるので、作ったオブジェクトをターンテーブルに乗せてくるくる回しているような状態にはなります。バックグラウンドで音楽を再生させたままで操作できるので、音楽をBGMにしながらオブジェクトがくるくる回ってるのを眺めることができます。ちなみにオブジェクトのデータは3レベルの階層構造になっていて、基本図形は画像にある14種です。一番上のレベル(オブジェクト)単位でFTPを使った入出力などもできるようにしました。その他いろいろなアイデアを詰め込んでます。かなり面白いソフトになっているので、アップルの承認が得られると良いなと思います。


前回起動時の選択項目にチェックマークを付ける

2009年01月07日
アプリが一回起動した場合、あちらこちらへビューを移動させても、各テーブルの状態は保存されています。タブで他のビューに切り替えた後に元のビューへ戻っても、付けたチェックマークなどはそのまま残っています。ただ、一度アプリを終了し、再度アプリを起動してみるとビューの状態はリセットされています。そのため、もし前回起動した時の状態に戻したい場合には、アプリ終了時点の状態を保存し、ビューを表示する際に保存した状態に復旧する処理を自分で行わなければなりません。今回はその方法のうち、TableCellに関わる部分だけ説明します。まじめに説明するとこれだけでも相当な文量になりますので、他の部分はまた別の機会ということにします。さて、まずは下のコードを見てください。今回も某開発中ソフトのコードをそのまま貼付けています。セクションは1個だけで、3個のセルからなるテーブルで1個を選ぶとその1個だけにチェックマークが付くという処理をさせていた状態で、アプリを終了した場合を想定してみてください。再度立ち上げたので、テーブルを表示する時点では、そのテーブルを扱っているTableViewControllerのviewWillAppearが呼ばれます。ですから、ここで前回の状況へ回復させる処理を行わせるとしましょう。

- (void)viewWillAppear:(BOOL)animated {

    [super viewWillAppear:animated];

for (int i = 0;i<3;i++) {

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:i inSection:0];

UITableViewCell *cell = [myTableView cellForRowAtIndexPath:indexPath];

cell.accessoryType = UITableViewCellAccessoryNone;

}

NSInteger selectedRow = [[myDictionary objectForKey:@"level"]intValue];

NSIndexPath *oldIndexPath = [NSIndexPath indexPathForRow:selectedRow inSection:0];
UITableViewCell *oldCell = [myTableView cellForRowAtIndexPath:oldIndexPath];

oldCell.accessoryType = UITableViewCellAccessoryCheckmark;

}


注目ポイントは4行目の[NSIndexPath indexPathForRow:inSection:]です。これでセクション番号0(つまり一番上のセクション)の行番号i(ここでは一番上の0から三番目の2までが入ります)を示すindexPathが作れます。次の行ではこれを使ってセクション番号0、行番号iのセルへのポインタを獲得しています。そして、そのセルのアクセサリーを「なし(UITableViewCellAccessoryNone)」にしています。この一連の処理で全部のセルからチェックマークを外します(何かの間違いでチェックマークが残らないように、念のために一回全部消してしまっています)。そして今回は詳しく触れませんが、終了時に保存しておいたディクショナリーからどのセルを選択したかの記録を呼び出します。そこから前回選択したセルのポインタを取得、そのアクセサリーを「チェックマークあり(UITableViewCellAccessoryCheckmark)」にしたというわけです。

ちなみに、myTableViewはヘッダーファイル側で

IBOutlet UITableView *myTableView;

と宣言しておき、

@property (nonatomic,retain) UITableView *myTableView;

 
というプロパティにしてあり、さらにメソッドファイルで

@synthesize myTableView;


と@implementation直後に宣言してあり、deallocで


[myTableView release];

と書いてあり、InterfaceBuilder側での俗に言うところの紐付けもしてあるものとします。前提条件もこうして書くと長いものです。

2009.03.04追記
このビューが扱うデータが1つに限定される場合には、ViewWillAppearではなくViewDidLoadに記述しておけば問題ありません。選択させるデータは全く同一でも、複数のビューから呼び出して使い回しをする場合にはViewWillAppearでチェックマークの位置を付け直す必要があります。

実機でのローカライズに失敗する場合

2009年01月04日
以前の記事で文字列のローカライズについて書きましたが、あれだけでは不完全でうまく動かない場合があります。これは自分がはまっていた問題なのですが、シミュレーターでは日本語表示されるのに、なぜか実機では英語で表示されるという、何とも中途半端な問題が発生することがあります。この問題の解決方法がようやく見つかりました。

解決方法
  1. Xcode左側のリストのリソース項目に追加した日本語用のローカライズファイルを選択します。
  2. ウインドウ上のタイトルバー近くにある情報アイコンを押します。
  3. ウインドウが開くので中央付近の「エンコーディング」から「Unicode (UTF-16)」を選択します。
  4. さらにウインドウが開くので「変換」のボタンを押します。
  5. Xcodeのメニューで「ビルド」>「すべてのターゲットをクリーニング」を選びます。
  6. あとはいつも通り「ビルドして進行」させます。

これで実機でも日本語表示が行えるようになります。なぜか実機ではローカライズがうまくいかないという場合はお試しあれ。

キー値コーディングの落とし穴

2009年01月02日
キー値コーディングは一度概念を理解してしまうと、もの凄く便利です。現在製作中のアプリにおいてもそれこそ湯水のごとく多量に使っています。まあ、概念を理解して使いこなせるようになるまでが結構大変なんですけどね。そして厄介なことに、私にとってはデバックで問題の発見がしにくい原因となるものでもあります。理由はとても簡単です。キー値の部分はコードの中では単なる文字列なので、Xcodeの補完入力が行われません。そのため、キー値のスペルミスは全くチェックされないからです。

@"key"と書くべきところが@"Key"となっていても、その逆の場合でも、当たり前ですがXcodeは何も言ってくれません。自分が打ち間違いやら思い込み違いやら、その他諸々をしなければ良いだけなんですが、キーの値を英語にすると、複数形にしてsを付けたかどうかや大文字で始めたかそれとも小文字で始めたかなど、後から迷ったりします。そうすると存在するはずの値が拾われないなどという、とても発見が難しいバグが起きたりします。一文字違うだけでも違う値になるのは当たり前で、そうでなければ困るのですけどね。というわけで皆様、キーの値は確実に一貫性を持たせましょう。

あけましておめでとうございます

2009年01月01日
あけましておめでとうございます。
本年もよろしくお願いします。

年が明けたというのに新作ソフトの追い込みで勝手に忙しい状態が続いております。これも当初の予定を大幅に上回る規模での開発になってしまったのが原因でしょうね。年明けまでにリリースする予定だったのですが、いろいろ機能を欲張ってしまいました。以前リリースしたKigenと比べると、初リリースで持ちうる機能のほとんどは先に持たせてしまおうという方向で開発しています。バージョンアップするとしたら機能アップよりはバグとりやらがメインとなりそうです。

実機でプログラムが動かない場合

2008年12月31日
 プログラムが完成し、シミュレーターで一通りの動作確認が完了たら、実機に転送して確認するのですが、ここで転送がうまくいかない場合があります。この場合、実機を再起動すると何事も無かったかのように動くようになる場合があります。実機の再起動が必要かどうかは、Xcodeのメニューにある、ウインドウからオーガナイザを選ぶことで確認できます。オーガナイザの画面左にあるDEVICESに注目してみてください。実機が正常に接続されている場合には実機のアイコンの右にあるインジケーターが緑色になっています。この場合、実機への転送は問題なく行えます。ここが黄色になっている場合には実機の再起動が必要です。

なお、再起動は一度電源を切った後(左上のボタンを長押しで表示される電源オフの表示で左にある赤い矢印ボタンを完全に右にスライドさせると電源が切れます。)、左上のボタンを再度長く押して離せば良いです。おまけですが電源を切っている間は先ほどのインジケーターが赤色になっています。

新アプリ開発中です

2008年12月21日
現在、いろいろそっちのけでアプリ開発中です。近日中にiTune Connectへアップできると思われます。KigenおよびKigen Liteユーザーの皆様には、アップデートを放置した状態となり申し訳ありませんが、しばらくお待ちください。そちらのアップデートも年明けには再開する予定です。