正月に読むつもりで amazon.co.jp から ‘The iPhone Developer’s Cookbook’
と手に入れるのが簡単になった ‘ニンテンドーDSi ブラック’を購入しました。
また、’iPhone SDKプログラミング大全’
も予約しておきました。’The iPhone Developer’s Cookbook’、’ニンテンドーDSi ブラック’ は正月前に、’iPhone SDKプログラミング大全’ は 2009/01/07(Wed) に届きました。
‘The iPhone Developer’s Cookbook’、’iPhone SDKプログラミング大全’ に触れる前に、私自身驚いた ‘ニンテンドーDSi‘ について一言書きたいと思います。
まず、’ニンテンドーDSi‘ が今までの携帯ゲーム機に比べて何が違うかというと内蔵メモリに ‘DSiウェア‘と呼ばれるソフトウェアを入れることができます。’DSiウェア‘ は ‘ニンテンドーDSiショップ‘ という名前の内蔵ソフト( ‘DSiウェア‘と違いはないと思います) を使って購入できます。
また ‘ニンテンドーDSi‘ にはカメラが2つ付いているのですが、それを利用した ‘DSiウェア‘ の ‘うつすメイドインワリオ‘ や内蔵ソフト ‘ニンテンドー DSi カメラ’ などは iPhone でよく見かけるアプリと同じテーストです。
特に技術的に可能なら ‘ニンテンドー DSi カメラ’ や ‘うごくメモちょう‘ などは iPhone にも欲しいソフトだと思います。
さらに、’ニンテンドーDSiブラウザー’ と呼ばれる Opera 製のウェブブラウザーもあります。さすがにフォントも汚いし、動作速度も遅いので iPhone の Safari には劣ります。
しかし、これはもう iPhone というか iPod touch の機能を下げた下位機種といっていいほど同じ土壌の製品だと思います。いずれ ‘ニンテンドーDSi‘ の後継機が出れば GPS や 加速度センサーが付いてくる可能性すらあります。
内蔵メモリが増えてくれば iPod touch との差も埋まってくると思います。
違いはその時の最新の技術を使うか、枯れた技術を使うかの差だと思います。携帯電話もあるし今後どういう風に進化するか1ユーザーとして大変楽しみです。
‘ニンテンドーDSi‘ で音楽を聴くには SD カードを利用します。対応しているフォーマットは AAC です。
iTunes Store で買った曲には著作権フリーなものもあります。
iTunes を起動して、曲を表示しているテーブルのヘッダを右クリックしてメニューを出し、種類にチェックを入れてください。’種類’ ヘッダをクリックするとソートされます。AAC の種類は
購入した AAC オーディオファイル 保護された AAC オーディオファイル
の二通りあると思います。’購入した AAC オーディオファイル’ が著作権フリーの曲です。
曲を選んで右クリックしてメニューを出し、’Finder で表示’ を選択してください。ファイルが表示されます。SDカードに適当なフォルダ (私の場合 Music) を作って、SDカードにコピーしました。
私が iTunes Store で購入した曲で著作権フリーなものは20曲ほどありました。ニンテンドーDSi で何の問題もなく聞くことができました。
‘ニンテンドーDSi‘ 用に ‘漢字そのまま DS楽引辞典‘
を購入しました。iPod touch と同じような使い方になってしまいそうです。
‘ニンテンドーDSi‘ で ‘漢字そのまま DS楽引辞典‘ を利用して思ったのですが、タッチペンを使ったボタンなどのデザインが垢抜けていないし、インターフェイスが定まっていない気がします。iPhone のような GUI やフレームワークを持っていれば面白いのですが!
‘ニンテンドーDSi‘ の話はここまでにして、’The iPhone Developer’s Cookbook’ と ‘iPhone SDKプログラミング大全’ を読み終えたので感想を書きたいと思います。
‘iPhone SDKプログラミング大全’ は2,3日で読めました。入門用だと思います。基礎を固めるのにちょうど良いと思います。ただし、’The iPhone Developer’s Cookbook’ では触れられていない OpenGL についての簡単な説明があります。また、アニメーションの解説は大変勉強になりました。
‘The iPhone Developer’s Cookbook’ は、実際に自作アプリを作成するのに必要な機能をサンプルコードを交えて説明されているので大変参考になります。
The iPhone Developer's Cookbook 目次 Chapter 1: Getting Started with the iPhone SDK Chapter 2: Views Chapter 3: View Controllers Chapter 4: Alerting Users Chapter 5: Basic Tables Chapter 6: Advanced Tables Chapter 7: Media Chapter 8: Control Chapter 9: People, Places, and Things Chapter 10: Connecting to Services Chapter 11: One More Thing: Programming Cover Flow
Chapter 2: Views – P53 で使われている円の内側か判定する関数 (下記 pointInside: ) などはプログラムリストより円の不等式で表した方が簡単です。
Chapter 2 Views P53 サンプル 04a - Clipped Views #define SIDELENGTH 57 // Detect whether the touch "hits" the view - (BOOL) pointInside:(CGPoint)point withEvent:(UIEvent *)event { CGPoint pt; float HALFSIDE = SIDELENGTH / 2.0f; // normalize with centered origin pt.x = (point.x - HALFSIDE) / HALFSIDE; pt.y = (point.y - HALFSIDE) / HALFSIDE; // x^2 + y^2 = radius float xsquared = pt.x * pt.x; float ysquared = pt.y * pt.y; // If the radius < 1, the point is within the clipped circle if ((xsquared + ysquared) < 1.0) return YES; return NO; }
円の不等式
中心 x0, y0
半径 r
より、上のプログラムを円の不等式に書き換えると
両辺を で割ると
を満たす時、点 (point.x, point.y) は円の内側にある。
また、本のプログラムリストと
http://www.ericasadun.com
でダウンロードしたサンプルと違う箇所が結構ありました。P125の Recipe 4-8 などが典型的な例です。
また、非公開だけど便利な API がたくさん紹介されています。
説明されれば納得できるのですが
Chapter 8 Controls P238 Recipe: Animation Button Response サンプルコード C08 - Controls 03a - AnimButtonFlip
の通り、UIButton ( UIControl ) が UIView を継承しているので Animation を利用できるんですね。驚きました!
P240 の Expoloring UIControl View Hierarchy では
Chapter 8 Controls P240 サンプル 04b - Explode /* UISwitch:UIControl --_UISwitchSlider:UISlider ----UIImageView:UIView ----UIImageView:UIView ----UIView:UIResponder ------UILabel:UIView ------UILabel:UIView ----UIImageView:UIView */ #define outstring(anObject) [[anObject description] UTF8String] - (void) explode: (id) aView level: (int) aLevel { for (int i = 0; i < aLevel; i++) printf("--", aLevel); printf("%s:%s\n", outstring([aView class]), outstring([aView superclass])); for (UIView *subview in [aView subviews]) [self explode:subview level:(aLevel + 1)]; }
UISwitch がどんな構造になっているか調べることができます。
当たり前かもしれませんが UILabel や UIImageView を利用して作られているんですね!UIControl を継承する独自の部品を作成するのに参考になりそうです。