XCodeプロジェクトの「グループとファイル」の一番上のグループは、「プロジェクト」に必要なソースコードやライブラリのようです。(名前はプロジェクト名になります)
◆Classes
Objective-C のコードが入ります。通常はここのファイルをコーディングします。
◆Other Sources
Objective-C 以外のコードが入ります。
・ *.pch : プリコンパイル済みヘッダ(外部のフレームワークヘッダ等)
・ main.m : メイン関数 main()が記載された実装ファイル(原則変更不要)
◆Resources
アプリケーションのイメージ、サウンド、ムービー、テキストファイル、プロパティリスト等が入る。
・ 〜 Controller.xlib Interface Builder が見るファイル
・ MainWindow.xlib メインとなるInterface Builderファイル(nibファイル:nはNext Step<元となったOS>の意味)
・ 〜 -Infor.plist プロパティリスト(画面の設定情報)
◆Frameworks
リンク可能な特殊なライブラリ(???)
◆Products
生成したアプリケーション(*.app)が入ります。
2010年4月24日土曜日
XCodeプロジェクト アクティブSDK
XCodeでは、動作確認を行うSDKのバージョンとiPhoneシミュレータか実機か等を選択することができます。
方法としては、XCodeを起動して、テンプレートを選択したら、XCodeプロジェクトウィンドウが開きます。そのウィンドウの左上にある「Simulator - ....」というボタンをクリックすると、開発のベースとなるSDKのバージョン、実機かシミュレータか、デバック用かリリース用かが選択できます。
方法としては、XCodeを起動して、テンプレートを選択したら、XCodeプロジェクトウィンドウが開きます。そのウィンドウの左上にある「Simulator - ....」というボタンをクリックすると、開発のベースとなるSDKのバージョン、実機かシミュレータか、デバック用かリリース用かが選択できます。
Objective-Cのクラス定義
Objective-Cでは、クラスを以下の2つに分けて定義します。
◆インタフェース(*.h)
#import "ItsSuperclass.h"
@interface ClassName : ItsSuperclass //(注)ItsSuperclassを省略するとルートクラスとなる。
{
インスタンス変数宣言 //... 継承された型がそのまま利用できる。
}
± (型)メソッド宣言 // .... クラスメソッド の場合:先頭に+
// インスタンスメソッド の場合:先頭にー
// 型を省略すると、id型
// 引数が複数の場合: - (void) setWidth:(float) width height: (float)height;
// 可変引数の場合: - makeGroup: group, ..... ;
@end
@class Rectangle, circle; // 継承関係のないクラスの利用の場合(よくわからん..)
◆インプリメント(*.m)
@implementation ClassName : ItsSuperclass // ItsSuperclassは省略可
{ //省略可
インスタンス変数宣言 // 省略可
} //省略可
± (型)メソッド定義: (型)変数
{
メソッドの実装
//引数が複数の場合、va_list ap; va_satrt(ap, group); 等
//インスタンス変数がレシーバでないオブジェクトに属する場合:
//よくわかりません。(Objective-C Programming P.42)
// selfの用法:よくわかりません。
}
@end
はい、はい、まだまだ道はながそうです。
- インターフェイス(*.h):クラスのインスタンス変数とメソッドを宣言、スーパクラスを指定
- インプリメント(*.m):実際のクラス定義とメソッドを実行するコー
◆インタフェース(*.h)
#import "ItsSuperclass.h"
@interface ClassName : ItsSuperclass //(注)ItsSuperclassを省略するとルートクラスとなる。
{
インスタンス変数宣言 //... 継承された型がそのまま利用できる。
}
± (型)メソッド宣言 // .... クラスメソッド の場合:先頭に+
// インスタンスメソッド の場合:先頭にー
// 型を省略すると、id型
// 引数が複数の場合: - (void) setWidth:(float) width height: (float)height;
// 可変引数の場合: - makeGroup: group, ..... ;
@end
@class Rectangle, circle; // 継承関係のないクラスの利用の場合(よくわからん..)
◆インプリメント(*.m)
@implementation ClassName : ItsSuperclass // ItsSuperclassは省略可
{ //省略可
インスタンス変数宣言 // 省略可
} //省略可
± (型)メソッド定義: (型)変数
{
メソッドの実装
//引数が複数の場合、va_list ap; va_satrt(ap, group); 等
//インスタンス変数がレシーバでないオブジェクトに属する場合:
//よくわかりません。(Objective-C Programming P.42)
// selfの用法:よくわかりません。
}
@end
はい、はい、まだまだ道はながそうです。
- オブジェクトの割当と初期化
- プロトコル
- 宣言済みプロパティ
- カテゴリと拡張
- 関連参照
- 高速列挙
- 静的な動作の実現
- セレクタ
- リモートメッセージング
Objective-Cの概念
iPhoneのコーディングには、Objective-Cの理解が欠かせないようです。
といっても難しいですね。簡単にまとめてみます。
といっても難しいですね。簡単にまとめてみます。
- クラス:同じインスタンス変数、メソッドを持つオブジェクトの集合(種類)
- メンバ:あるオブジェクトは、特定の種類のクラスのメンバ
- オブジェクト:データ(インスタンス変数)と操作(メソッド)を一塊にしたもの。実行時に動的に「インスタンス」として生成される。型:id (isa変数), 通常オブジェクト名で宣言する。ex. Rectangle *myRectangle;
- インスタンス変数:オブジェクトの状態を保持するデータのこと(通常隠蔽される)ただし、以下の4段階で解放される。
- @private .... クラス内のみ
- @protected … クラス及び継承するクラス(デフォルト)
- @package... クラス実装内のどこからでもアクセス可
- @public … どこからでもアクセス可
- メソッド:オブジェクトを操作する関数(機能)のこと。オブジェクトには原則メソッドを使ってアクセスする。
- スーパクラス:あるクラスの親(継承元)となっているクラス
- サブクラス:あるクラスを継承して作成したクラス
- メソッドの同一名称による宣言:サブクラスでのメソッドのオーバライド(インスタンス変数はオーバライドできない)
- super:オーバライドしていても、スーパクラスからメソッドを検索する。
- self:自分からメソッドを検索する。
- インスタンス:オブジェクトを実行するために、メモリ上に展開されたオブジェクトの実体
- インスタンスの生成:allocメソッド(インスタンス変数を全て0にする)、及びinitメソッド(完全に初期化する)を用いる。id xxxx = [[ クラス名 alloc] init]、または、オブジェクト名* xxxx = [[ クラス名 alloc] init]
- クラスオブジェクト:クラス毎にそのクラスのインスタンスを生成/管理するオブジェクト
- オブジェクトメッセージング:オブジェクトに対するメソッドの実行指示
- 構文:[ receiver message ];
- receiver:オブジェクト名
- message:メソッドと引数。メソッド名(セレクタとも言う):引数 で表現される。引数が複数ある場合:「メソッド名X:Y:」 で実装または、コロンで区切って実装 [receiver メソッド名: x, y, z]
iPhoneSKDのダウンロード
前の投稿が消えてしまったので再掲です。
iPhoneアプリ開発のためには、まずiPhoneSDKのダウンロードが必要です。
iPhoneアプリ開発のためには、まずiPhoneSDKのダウンロードが必要です。
しかし、容量が桁違い。2.5GBもあります。びっくり。
AppleはこれだけのリスクをもってiPhoneを開発したんだと、ただただ、スティーブへの尊敬の念を持ってやみません。
日本の会社のトップにこれだけの開発を指揮できる人はいないでしょうね。このような歴史と背景があることの存在すら知らず、何故差があるのかを理解できないのだと思います。
iPhone開発の制約
iPhone開発にあたっては、以下の制約の考慮が必要なようです。
- メインメモリ: 128MBですが、他のリソースもあり、64MB程度の範囲でプログラムする必要があるようです。さらにメモリが逼迫してきた場合、通知があり、メモリ解放をしないと停止させられるそうです。
- 終了処理: ホームボタンが押されるなど、終了通知があった場合は、必要な情報を保存し、5秒以内に終了しないと情報は失われるそうです。
iPhone Developer Program
iPhone 実機でのテストや、Appleストアでの配信のためには、有償のiPhone developer Program への加入が不可欠です。
年間参加費 ¥10,800-ですが、Apple への敬意ということでしかたないですね。
アドレスは以下となります。
http://developer.apple.com/jp/programs/iphone/
もっとも自信が持てるまでは、加入は見送りたいと思います。
年間参加費 ¥10,800-ですが、Apple への敬意ということでしかたないですね。
アドレスは以下となります。
http://developer.apple.com/jp/programs/iphone/
もっとも自信が持てるまでは、加入は見送りたいと思います。
MacでDVD-RAM
PCのDVD-RAMが余っていたのでMacで使ってみようと思い付き、写真をDVD-RAMにコピーしてみました。ところが何故か容量以下のファイルしか書き込むことができません。
そこでゼロからやり直そうと、ディスクユーティリティでUDFフォーマットを選択すると途中でエラーが出て、そこから進みません。
悩んだあげく、結局FATでフォーマットすると容量一杯つかえるようになるようです。ただし、書き込み時間が数時間....ま、しょうがないか。
しかし、Macに慣れるまで時間かかるなぁ....
そこでゼロからやり直そうと、ディスクユーティリティでUDFフォーマットを選択すると途中でエラーが出て、そこから進みません。
悩んだあげく、結局FATでフォーマットすると容量一杯つかえるようになるようです。ただし、書き込み時間が数時間....ま、しょうがないか。
しかし、Macに慣れるまで時間かかるなぁ....
2010年4月23日金曜日
iPhone開発初心者は、まずどの本を購入すべきか
ちまたにはiPhone開発の本が多数あり、どれを買うべきか迷ってしまいます。と、言うよりリファレンスや解説は、本来はiPhone Developerサイトにあるため、本来何も買わないでできる「はず」です。
では、何故iPhone開発本を買わなくてはならないのか。それは、iPhone Developerサイトの多くのドキュメントを読み切るには、時間に制約のあるなか、おのずと限界があるためです。
iPhone開発の場合、本を買うという行為は、リファレンスを買うというよりは、時間短縮のため、またはリファレンスやサンプルソースを読めるようになるまで導いてもらう、という位置づけになるでしょう(入門書、コンコン...)。もしくは、整理されたTipsを手軽に入手する、という位置づけになるかと思います。
自分は、というと、サイトの現状もわからず、目的も明確にしないまま、どれを買っていいかわからず、たくさん買ってしまいました。
最初に買った本は、比較的わかりやすかったのですが、肝心なものがありません。アプリケーションを良いものにするのは、第一に「コンテンツが充実している」こと、ですから、「データ」をどこからかもってこなければなりません。インターネット(Google等)が理想ですが、そこまでのものを作るには山がありすぎ、時間を無駄に浪費してしまいます。そこで出番なのが、写真アプリです。簡単にPCからダウンロードできますので、ユーザにお願いするにも簡単です。ところが、その本には、肝心の作ろうと思っていた写真アプリからの画像取り込みがないっぽかったです。←最後まで読めよ、俺。
何かいい情報はないかと、いろいろとググると、その機能を持つクラスが、UIImagePickerControllerであること見つけました。そこで本屋さん(ビックカメラ有楽町店)で立ち読み攻撃。このクラスの解説がある本を見つけ、速攻で買ってしまいました。しかしわかりずらい ←ちゃんと読めよ。俺。
翌日、またビックカメラで立ち読み攻撃... かえろうかと思いつつ、真っ赤な本を取ると... ありました。入門書。これぞ入門書。段階を追って、高度なインターフェースを作るまで導いてくれる書。はじめからこれだけ買えばよかった...
ということでお勧めです。みなさんは無駄な時間やお金は使わないように。← 読み切ってから勧めろよ。俺。
では、何故iPhone開発本を買わなくてはならないのか。それは、iPhone Developerサイトの多くのドキュメントを読み切るには、時間に制約のあるなか、おのずと限界があるためです。
iPhone開発の場合、本を買うという行為は、リファレンスを買うというよりは、時間短縮のため、またはリファレンスやサンプルソースを読めるようになるまで導いてもらう、という位置づけになるでしょう(入門書、コンコン...)。もしくは、整理されたTipsを手軽に入手する、という位置づけになるかと思います。
自分は、というと、サイトの現状もわからず、目的も明確にしないまま、どれを買っていいかわからず、たくさん買ってしまいました。
最初に買った本は、比較的わかりやすかったのですが、肝心なものがありません。アプリケーションを良いものにするのは、第一に「コンテンツが充実している」こと、ですから、「データ」をどこからかもってこなければなりません。インターネット(Google等)が理想ですが、そこまでのものを作るには山がありすぎ、時間を無駄に浪費してしまいます。そこで出番なのが、写真アプリです。簡単にPCからダウンロードできますので、ユーザにお願いするにも簡単です。ところが、その本には、肝心の作ろうと思っていた写真アプリからの画像取り込みがないっぽかったです。←最後まで読めよ、俺。
何かいい情報はないかと、いろいろとググると、その機能を持つクラスが、UIImagePickerControllerであること見つけました。そこで本屋さん(ビックカメラ有楽町店)で立ち読み攻撃。このクラスの解説がある本を見つけ、速攻で買ってしまいました。しかしわかりずらい ←ちゃんと読めよ。俺。
翌日、またビックカメラで立ち読み攻撃... かえろうかと思いつつ、真っ赤な本を取ると... ありました。入門書。これぞ入門書。段階を追って、高度なインターフェースを作るまで導いてくれる書。はじめからこれだけ買えばよかった...
ということでお勧めです。みなさんは無駄な時間やお金は使わないように。← 読み切ってから勧めろよ。俺。
2010年4月22日木曜日
AppleのDeveloperサイト
今更ですが、iPhoneの開発にはAppleのDeveloperサイトから情報を得るのが基本です。
まず、http://developer.apple.com/jp/ へ行きます。
ここから、iPhone Dev Centerをクリックします。
すると、英語サイトが現れ、挫折します(笑)
そこであきらめずに、日本語サイトに直接行きます。
http://developer.apple.com/jp/iPhone/library/japanese.html
まず、http://developer.apple.com/jp/ へ行きます。
ここから、iPhone Dev Centerをクリックします。
すると、英語サイトが現れ、挫折します(笑)
そこであきらめずに、日本語サイトに直接行きます。
http://developer.apple.com/jp/iPhone/library/japanese.html
MacでTV
iMacでテレビを見る際は、一般にビクセラ社の3波チューナなどをつけるようです。
しかしながら、ゲームを表示させたり、ケーブルテレビ会社のチューナを見るには、外部入力がなく不便です。HDDレコーダしかり。
そんなときはアナログ入力のキャプチャ機器がよさそうなのですが、4:3/16:9の変更だとか、ゲームのリアルタイム表示ができるのかがわからず躊躇してしまいます。
で、いろいろ探しましたが、ついに見つけました。
mathey VIDEO CAP For Mac MVCP-02MAC
です。Amazonで★★★★★です。お勧め。
しかしながら、ゲームを表示させたり、ケーブルテレビ会社のチューナを見るには、外部入力がなく不便です。HDDレコーダしかり。
そんなときはアナログ入力のキャプチャ機器がよさそうなのですが、4:3/16:9の変更だとか、ゲームのリアルタイム表示ができるのかがわからず躊躇してしまいます。
で、いろいろ探しましたが、ついに見つけました。
mathey VIDEO CAP For Mac MVCP-02MAC
です。Amazonで★★★★★です。お勧め。
写真/カメラ画像を取り込もう。
写真アプリやカメラ画像(含む動画)を取り込むには、UIImagePickerControllerクラスとその親クラスのUIViewControllerクラスを使い、UIImageクラス等に表示するそうです。また、画像情報の縮小/切取りは、UIImagePickerControllerクラスで機能を指定すれば良く、さらに加工したいときは、UIGraphicsを使うようです。より高度が画像加工をするときは、ここでは触れませんが、UIKitではなくC言語APIのCore Graphicsフレームワークを使うそうです。
--------------------------------------------------
◆UIImagePickerControllerクラス iPhoneアプリで画像を扱う際に、既存のカメラで画像を取得したり、写真アプリから画像を選択する場合に使用するようです
ー sourceTypeプロパティ
Image Pickerがどのようなタイプの機能(Source)にアクセスするかを指定するには、sourceTypeプロパティを使うそうです。Typeはそれぞれ定数で決められており、次で指定します。
◆UIImagePickerControllerクラス iPhoneアプリで画像を扱う際に、既存のカメラで画像を取得したり、写真アプリから画像を選択する場合に使用するようです
ー sourceTypeプロパティ
Image Pickerがどのようなタイプの機能(Source)にアクセスするかを指定するには、sourceTypeプロパティを使うそうです。Typeはそれぞれ定数で決められており、次で指定します。
- UIImagePickerControllerSourceTypePhotoLibrary フォトライプラリ(デフォルト値)
- UIImagePickerControllerSourceTypeCamera カメラ
- UIImagePickerControllerSourceTypeSavedPhotosAlbum iPhoneの場合:カメラロール、iPod touchの場合:「Saved Photos」フォルダを開く
Image Pickerによる「画像」の拡大縮小・切取り(クロップ)の可否を指定するには、このプロパティで指定するようです。
ー +(BOOL)isSourceTypeAvailable:メソッド
当該ソースタイプが動作している環境で使用可能かをチェックします。
--------------------------------------------------
◆UIViewControllerクラス
UIViewControllerクラスは、UIImagePickerControllerクラスの親クラスであり、イメージピッカーの表示にUIViewControllerのpresentModalViewController:animated:というメソッドを使用するそうです。
--------------------------------------------------
◆Picker表示までのプロセス
◆UIViewControllerクラス
UIViewControllerクラスは、UIImagePickerControllerクラスの親クラスであり、イメージピッカーの表示にUIViewControllerのpresentModalViewController:animated:というメソッドを使用するそうです。
--------------------------------------------------
◆Picker表示までのプロセス
- 動作可能かチェック(isSourceTypeAvailable:)
- UIImagePickerControllerのインスタンス化(UIImagePickerController* imagepick)
- 初期化(imagepick=[[UIImagePickerController alloc] init])
- 各プロパティを設定(imagepick.プロパティ = 値)
- 自身をデリゲートとして設定(imagepick.delegate = self)
- Pickerを隠す (self dismissModalViewControllerAnimated:YES)
- UIImagePickerControllerを使った写真の撮影が終了すると、デリゲートメソッドであるimagePickerController:didFinishPickingImage:editingInfo:が、呼び出される。
- 上記引数のUIImageにある写真は、320x320(スクリーンサイズにマッチ)
- オリジナルデータ上記引数の(NSDictionary)editingInfoを使う(1200x1600:カメラの場合)
- editingInfoにはユーザの編集情報もあり、UIImagePickerControllerCorpRectで取り出す。
- 取り出したデータは、UIImageViewクラスのimageプロパティで表示する
iPhoneシミュレータの「写真アプリ」に画像を入れる方法
iPhoneシミュレータの写真アプリに画像を入れるには、シミュレータに画像をドラック&ドロップし、Safariで開いたところを長押ししてあげればいいようです。
iPhone ガイドライン/リファレンス
iPhoneヒューマンインタフェースガイドラインの日本語版がないので、諦めかけていたらありました。ちょっと、本買っちゃったよ.....
ドキュメントは基本的に以下にあります。
◆Apple開発者サイト http://developer.apple.com/jp/
しかし、へたにクリックすると英語サイトになったりリンク切れも多く、日本語のドキュメントを見つけることができません。
しかしここに日本語ガイドのリンクがありました。ただしPDFです。
本来はHTMLの方が使い勝手がいいのですが、検索でたまに見つかるだけでした。
ところがURLをいじってみると秘密がわかりました。英語ドキュメントを開いて、URLのwww.apple/com/〜 の間に/jpを入れます(www.apple/com/jp/〜)。そして運がよければ(^^;; 日本語になります。
現在の日本語化の状況はこんな感じです。
■ガイド
ドキュメントは基本的に以下にあります。
◆Apple開発者サイト http://developer.apple.com/jp/
しかし、へたにクリックすると英語サイトになったりリンク切れも多く、日本語のドキュメントを見つけることができません。
しかしここに日本語ガイドのリンクがありました。ただしPDFです。
本来はHTMLの方が使い勝手がいいのですが、検索でたまに見つかるだけでした。
ところがURLをいじってみると秘密がわかりました。英語ドキュメントを開いて、URLのwww.apple/com/〜 の間に/jpを入れます(www.apple/com/jp/〜)。そして運がよければ(^^;; 日本語になります。
現在の日本語化の状況はこんな感じです。
■ガイド
- iPhone OSテクノロジーの概要(日本語HTML)
- iPhone 開発ガイド(日本語HTML)
- CoCoa 基礎ガイド(日本語HTML)
- iPhone ヒューマンインタフェースガイドライン(日本語HTML)
- iPhone アプリケーションプログラミングガイド(日本語HTML)
- Cocoaメモリ管理プログラミングガイド(日本語PDF)
- iPhone OS View Controller プログラミングガイド(日本語PDF)
- Objective-C 2.0 プログラミング言語(日本語PDF)
- Apple Push Notificationサービス プログラミングガイド(日本語PDF)
- Store Kit プログラミングガイド(日本語PDF)
- Game Kit プログラミングガイド(日本語PDF)
- iPodライブラリアクセス プログラミングガイド(日本語PDF)
- iPhone OpenGL ES プログラミングガイド(日本語PDF)
- iPhone アクセシビリティ プログラミング ガイド(日本語PDF)
- iPhone OS Core Dataチュートリアル(日本語PDF)
- iPhone OS View Controller プログラミングガイド(日本語PDF)
- iPhone OS Table View プログラミングガイド(日本語PDF)
- iPhone アプリケーション チュートリアル(日本語PDF)
- その他ガイド(英語)
■リファレンス
■コーディング How to はこちら。
階層メモ(Macアプリ)
開発用のアイディアも溜まってきたので、忘れないようにメモソフトを探しました。
調べてみると"Remember"というソフトがあり、使い勝手もとてもいいものでした。
画面右上のメニューバーに常駐することもできます。お勧めです。
調べてみると"Remember"というソフトがあり、使い勝手もとてもいいものでした。
画面右上のメニューバーに常駐することもできます。お勧めです。
iPhone OSのライブラリ
iPhone OSのライブラリには以下のものがあるようです。詳細は、Appleが発行している「iPhone OSテクノロジーの概要」の「iPhone OS テクノロジー」を参照ください。これでなんとか全体像がつかめました。まだまだ勉強しなくてはならないこはたんまりありそうです.......
●Cocoa Touchレイヤ GUI、イベント、ウィンドウやビュー、プッシュ通知やピアツーピア接続等
(1)グラフィスク
●Cocoa Touchレイヤ GUI、イベント、ウィンドウやビュー、プッシュ通知やピアツーピア接続等
- Apple Push Notification 文字通知、音声警告、アイコンへの数値付与
- Address Book UI 連絡先作成/編集画面
- Message UI 電子メールメッセージの作成、編集、キューイングIF
- MapKit 注釈(ピン等)を付けられるスクロール可能な地図画面
- Game Kit ボイス/ピアツーピアネットワークIF
- UIKit コピペ、ウィンドウ、タッチ、テキスト、Web表示、加速度/近接センサ、カメラ、、画像、バッテリ、障害者画面等 詳しくはこちら(UIKit Framework Reference)
(1)グラフィスク
- Quartz Core ベクトル(2D)描画エンジン、座標変換、PDF作成等
- Core Animation アニメーション/合成(他の画像部品にも適用)
- OpenGL ES 2D/3Dの描画ツール
(2)オーディオ
- Audio Toolbox オーディオの再生と録音のためのインターフェイス/データ等
- Audio Unit オーディオユニットとそのインターフェイス等
- AV Foundation オーディオの再生と録音のためのインターフェイス
- Core Audio Core Audio全体で使われるオーディオデータタイプの提供
- OpenAL OpenAL(オーディオライブラリ)用のインターフェイス等
(3)ビデオ
- Media Player ビデオを再生のインターフェイス等
- Address Book ユーザの連絡先データベースに直接アクセスするインターフェイス等
- Core Data データモデルを管理するためのインターフェイス等
- Core Foundation 基本サービス(一般的なデータ型の抽象化、文字列ユーティリティ、コレクションユーティリティ、リソース管理、環境設定など)。
- Core Location ユーザの位置を決定するためのインターフェイス等
- Foundation Cocoa Foundationレイヤ用のクラスとメソッド等。XML要素の抽出、XML->HTML変換
- Mobile Core Services システムによってサポートされるUTI (Uniform Type Identifier)の定義
- Store Kit In App Purchaseに関連付けられた会計処理を扱うためのインターフェイス
- System Configuration デバイスのネットワーク設定を判別するインターフェイス
- SQL lite ローカルにデータベースを作成する
- CFNetwork Wi-Fi無線と携帯電話網を使ったSSL,DNS,HTTP/HTTPS/FTP/Bonjour/BSDソケット通信を実行する。
- External Accessory 接続ハードウェアと通信するためのインターフェイス
- Security 証明書、公開鍵と非公開鍵、および信用ポリシーを管理
- IOKit デバイスのインターフェイス(直接のインクルードは不可)
- System ファイル、I/O, メモリ割当、演算
UIKit Class hearalkey
UIKitフレームワークは、iPhone、iPod touch、iPadのAPI構築に必要なクラスを提供します。
核となる機能セットは以下の通りです。
核となる機能セットは以下の通りです。
なお、個々のライブラリは高校生が訳してくれています。
・加速度センサー(UIAcceleration,UIAccelerometer)
・障害者用キット(UIAccessibility Element)
・バーアイテム(UIBarItem, UIBarButtonItem,UITabBarItem)
・グラフィクス(UIBezierPath)
・カラー(UIColor)
・充電/近接センサー等デバイス(UIDevice)
・ドキュメント(UIDocumentInteractionContoller)
・タッチ/モーション等イベント(UIEvent)
・フォント管理(UIFont)
・ジェスチャー(UIGestureRecognizer)
・画像表示(UIImage)
・テープルデータ加工(UILocalizedindexedCollation)
・メニュー(UIMenuController)
・階層ナビケーションコントローラ(UINavigationItem)
・コピー/ペースト(UIPasteboard)
・ポップオーバコントローラ(UIPopoverController: for iPad)
・画面サイズ(UIScreen)
・スクリーンモード(UScreenMode)
・検索表示(UISearchDisplayController)
・テキスト分析(UITextRange, UITextInputStringTokenizer, UITextPosition)
・タッチ/モーションイベント管理(UITuoch, UIRespnder)
- UIApplication
- UIView
- ウィンドウ管理 (UIWindow)
- ラベル/テキスト表示 (UILabel)
- 日付/時刻選択表示 (UIPickerView)
- タスクの進捗表示 (UIProgressView)
- 動作中表示 (UIActivityIndicatorView)
- 画像表示 (UIImageView)
- タブ/ボタン表示 (UITabBar)
- ナビゲーション(上)バー (UINavigationBar)
- (UITableViewCell)
iPhone開発に有用なサイト
どうも書籍だけでは必要な情報が得られません。
ということで、iPhone開発に有用なサイトを見つけたら、ここに記載したいと思います。
Googleカレンダーとの同期について
http://fanfanfan.net/?p=247
http://www.moongift.jp/2009/07/iphone_gcal/
http://code.google.com/p/iphone-gcal/
iPhoneアプリ開発で稼げるのか
ちょっと無理っぽいですが、無料アプリに有料アプリ広告を載せると売り上げがあがるっぽいです。この方は5本つくって年間50万円。投資と合わせて年間3000円??
http://iphone.longearth.net/
さてきびしい道のりですが、アフィリエイトよりはましかな。
ということで、iPhone開発に有用なサイトを見つけたら、ここに記載したいと思います。
Googleカレンダーとの同期について
http://fanfanfan.net/?p=247
http://www.moongift.jp/2009/07/iphone_gcal/
http://code.google.com/p/iphone-gcal/
iPhoneアプリ開発で稼げるのか
ちょっと無理っぽいですが、無料アプリに有料アプリ広告を載せると売り上げがあがるっぽいです。この方は5本つくって年間50万円。投資と合わせて年間3000円??
http://iphone.longearth.net/
さてきびしい道のりですが、アフィリエイトよりはましかな。
iPhoneテンプレートの種類
iPhoneでは予め7種のテンプレートが用意され、
これをベースに開発を進めます。
・Navigation-based Application
アイテムリストを表示するためのナビゲーションコントローラを使うテンプレートです。
コアデータを格納(Use Core Data for strageを選択)する場合、取得したリザルトコントローラを使って管理されたアイテムリストを表示するテンプレートとなります。
Core Data は MVC アーキテクチャの Model を補完するものです。iPhone 3.0 以前は SQLite などを使用していたのを Core Data を使って SQL を書くことなくデータペースアプリケーションを作れます。
http://www.syuhari.jp/blog/archives/1860
チュートリアル、サンプルコードについても記載があります。
・OpenGL ES Application
OpenGL ESペースのビューを使うテンプレートです。アニメーションを表示するOpenGL ESによるシーン、タイマーを描画する場合に使用します。
・Split View-based Application
スプリットビューコントローラと、master-detail型の2つのビューのコントローラでアプリケーションを作成するテンプレートです。
これを動かすとデカイウィンドウがでてきます。どうやらiPhone用といいながら、iPad用アプリケーションのようです。
・Tab Bar Application
タブバーとタブバーアイテムのためのビューコントローラで構成されるアプリケーションを作成するテンプレートです。
・Utility Application
メインビューとフリップスタイルビューを持つアプリケーションを構成するためのテンプレートです。メインビューをフリップさせるためのinfoボタンと、メインビューに戻るためのDoneアイテムを持つナビゲーションバーで構成されます。
・View-based Applicaton
シングルビューのアプリケーションのテンプレートです。
・Windows-based Application
一つのウィンドウとアプリケーションデリゲートのみのテンプレートです。
これをベースに開発を進めます。
・Navigation-based Application
アイテムリストを表示するためのナビゲーションコントローラを使うテンプレートです。
コアデータを格納(Use Core Data for strageを選択)する場合、取得したリザルトコントローラを使って管理されたアイテムリストを表示するテンプレートとなります。
Core Data は MVC アーキテクチャの Model を補完するものです。iPhone 3.0 以前は SQLite などを使用していたのを Core Data を使って SQL を書くことなくデータペースアプリケーションを作れます。
http://www.syuhari.jp/blog/archives/1860
チュートリアル、サンプルコードについても記載があります。
・OpenGL ES Application
OpenGL ESペースのビューを使うテンプレートです。アニメーションを表示するOpenGL ESによるシーン、タイマーを描画する場合に使用します。
・Split View-based Application
スプリットビューコントローラと、master-detail型の2つのビューのコントローラでアプリケーションを作成するテンプレートです。
これを動かすとデカイウィンドウがでてきます。どうやらiPhone用といいながら、iPad用アプリケーションのようです。
・Tab Bar Application
タブバーとタブバーアイテムのためのビューコントローラで構成されるアプリケーションを作成するテンプレートです。
・Utility Application
メインビューとフリップスタイルビューを持つアプリケーションを構成するためのテンプレートです。メインビューをフリップさせるためのinfoボタンと、メインビューに戻るためのDoneアイテムを持つナビゲーションバーで構成されます。
・View-based Applicaton
シングルビューのアプリケーションのテンプレートです。
・Windows-based Application
一つのウィンドウとアプリケーションデリゲートのみのテンプレートです。
アクションメソッドとアウトレットとアプリケーションデリゲート
アクションメソッドとアプリケーションデリゲートの違いがわかっていないのでここで整理します。
■アクションメソッド:
呼び出し側のイベントにより、当該オブジェクトのインスタンスを呼び出すために、当該インスタンスを(IBAction)で識別、Interface Builderに明示し、InterfaceBuilderのユーザインタフェースに表示されるため、インスタンスと呼び出し側オビジェクとをリンクします。ここのインスタンスで取得されるsenderは、呼び出し側のオブジェクトそのものとなり、当該オブジェクトのメソッドも利用可能となります。
AppDelegte.h のクラス宣言でメソッドプロトタイプ宣言の返り値に(IBAction) を指定します。
----------------------------------------------------------------------------------------
@interface xxxAppDelegate : NSObject <UIApplicationDelegate>{
// インスタンス変数宣言
}
// メソッドプロトタイプ宣言
- (IBAction) action : (UITextField *) sender ;
// forEvent : (UIEvent *) event を書くとさらに時刻やタッチされた座標等の追加
// 情報を得ることができます。
@end
------------------------------------------------------------------------------------------
これにより、Interface Builder上でアクションメソッドとして表示されます。
さらにInterface Builderにより、ボタン等のクラスの動作(Event)と
結びつけられることで、イベント発生時に呼び出されます。
呼び出された後の動作は、AppDelegate.mに記述します。
<関連付けクラス(Event) ⇒ アクションメッソドが呼び出される。>
■アウトレット
アウトレットは、メソッドプロトタイプ宣言ではなく、インスタンス変数宣言に記載します。
----------------------------------------------------------------------------------------
@interface xxxAppDelegate : NSObject <UIApplicationDelegate>{
// インスタンス変数宣言
}
// メソッドプロトタイプ宣言
@end
------------------------------------------------------------------------------------------
これにより、Interface BuilderのOutlet(コンセントの意)が現れ、ユーザインタフェース等の
クラス(インスタンス)そのものと関連づけます。
この関連付けにより、xxxAPPDelegate.m に当該インスタンスとそのメソッドを直接呼ぶことができるようです。
例:[ webView loadRequest : urlReq ];
<アウトレット宣言クラス ⇒ 関連付けクラスのメソッド等を呼び出すことができる>
■アプリケーションデリゲート
アプリケーションデリゲートは、アウトレットの一種であり、UIApplicationがデフォルトで保有するアウトレットとして、deligateが宣言され、Interface Builderから見ることができます。
<UIApplicationのアウトレット(deligate) → 関連付けクラスに記載されたアウトレット指定のメッソドを記述すればUIApplicationから必要時に呼び出だされる>
やっと理解できました。ほっ。
■アクションメソッド:
呼び出し側のイベントにより、当該オブジェクトのインスタンスを呼び出すために、当該インスタンスを(IBAction)で識別、Interface Builderに明示し、InterfaceBuilderのユーザインタフェースに表示されるため、インスタンスと呼び出し側オビジェクとをリンクします。ここのインスタンスで取得されるsenderは、呼び出し側のオブジェクトそのものとなり、当該オブジェクトのメソッドも利用可能となります。
AppDelegte.h のクラス宣言でメソッドプロトタイプ宣言の返り値に(IBAction) を指定します。
----------------------------------------------------------------------------------------
@interface xxxAppDelegate : NSObject <UIApplicationDelegate>
// インスタンス変数宣言
}
// メソッドプロトタイプ宣言
- (IBAction) action : (UITextField *) sender ;
// forEvent : (UIEvent *) event を書くとさらに時刻やタッチされた座標等の追加
// 情報を得ることができます。
@end
------------------------------------------------------------------------------------------
これにより、Interface Builder上でアクションメソッドとして表示されます。
さらにInterface Builderにより、ボタン等のクラスの動作(Event)と
結びつけられることで、イベント発生時に呼び出されます。
呼び出された後の動作は、AppDelegate.mに記述します。
<関連付けクラス(Event) ⇒ アクションメッソドが呼び出される。>
■アウトレット
アウトレットは、メソッドプロトタイプ宣言ではなく、インスタンス変数宣言に記載します。
----------------------------------------------------------------------------------------
@interface xxxAppDelegate : NSObject <UIApplicationDelegate>{
// インスタンス変数宣言
}
// メソッドプロトタイプ宣言
@property ( nonatomic, retain) IBOutlet UIWebView* WebView;
@end
------------------------------------------------------------------------------------------
これにより、Interface BuilderのOutlet(コンセントの意)が現れ、ユーザインタフェース等の
クラス(インスタンス)そのものと関連づけます。
この関連付けにより、xxxAPPDelegate.m に当該インスタンスとそのメソッドを直接呼ぶことができるようです。
例:[ webView loadRequest : urlReq ];
<アウトレット宣言クラス ⇒ 関連付けクラスのメソッド等を呼び出すことができる>
■アプリケーションデリゲート
アプリケーションデリゲートは、アウトレットの一種であり、UIApplicationがデフォルトで保有するアウトレットとして、deligateが宣言され、Interface Builderから見ることができます。
<UIApplicationのアウトレット(deligate) → 関連付けクラスに記載されたアウトレット指定のメッソドを記述すればUIApplicationから必要時に呼び出だされる>
やっと理解できました。ほっ。
アプリケーションデリゲートが呼ばれるタイミング
アプリケーションデリゲートは、以下のような場合に呼ばれ、iPhoneの動作に備えます。
アプリケーションのアクティブ時:applicationDidBecomeActive:
- アプリケーションの起動
アプリケーションのアクティブ時:applicationDidBecomeActive:
- 着信など
- 終話など
- ホームボタン押下など
アウトレットとは
予めInterface Builderで生成されているインスタンス(ここではUIWebView)をAPPDeligateで宣言した変数に組み込むには、IBOutletという形で明示してヘッダファイルで型を宣言するようです。
そうすると、ソースファイル上で宣言する必要はなく、AppDeligateのOutlet変数をInterface BuilderでWindow上に貼付けたWebViewへドラックすることで関連付け組み込むことができるそうです。
@interface Web_blowserAppDelegate : NSObject {
IBOutlet UIWebView* webView;
UIWindow *window;
}
そうすると、ソースファイル上で宣言する必要はなく、AppDeligateのOutlet変数をInterface BuilderでWindow上に貼付けたWebViewへドラックすることで関連付け組み込むことができるそうです。
@interface Web_blowserAppDelegate : NSObject {
IBOutlet UIWebView* webView;
UIWindow *window;
}
CoCoA プログラミング TIPS
iPhoneでの開発にあたっては、CoCoa のクラスライブラリやメソッド/データ型の知識をもってプログラミングしなくてはなりません。
しかしながら、Appleの開発者サイトはほとんんど英語。日本語で手短かに理解する方法を得なくてはなりません。
いろいろ調べていくと、よさそうなサイトがありました。
「COCOA PROGRAMMING TIPS 1001」
しかしながら、Appleの開発者サイトはほとんんど英語。日本語で手短かに理解する方法を得なくてはなりません。
いろいろ調べていくと、よさそうなサイトがありました。
「COCOA PROGRAMMING TIPS 1001」
Objective-Cの実行コード(ソース)ファイル(*.m)
ヘッダファイルでのメソッド定義、Interface Builderでの関連づけのあとは、実際のクラスの生成、動作を記述する実行コードを記載するソースファイルを作成します。
すでに AppDelegate.hの#import、@implement、@endの記述はありますので、メソッドの呼び出しを間に記載します。
先頭には、プロトタイプ宣言と同じものを記載し、{}で囲み、中で計算やメソッドの呼び出しを記載するようです。返り値がある場合はC言語と同様にreturn();で返します。
(1)引数のないメソッドの呼び出し方法
[ voice sayHello ]; (voiceという名前のオブジェクトsayHelloメソッドを実行)
[ オブジェクト名(レシーバ名とも言う) メソッド名(セレクタ名とも言う) ];
(2) 引数が1つのメソッドの呼び出し方法
[ voice sayHello: "Hello" ];
[ オブジェクト名 メソッド名 : 引数名 ];
(3) 引数が複数のメソッドの呼び出し方法
[ voice sayHello: "Hello"
speed : 1
pitch : 2 ];
[オブジェクト名 メソッド名+引数1の説明 : 引数1の名前
引数2の説明: (引数2の型) 引数2の名前
:
引数nの説明: (引数nの型) 引数nの名前];
(4)引数のネスト方法
以下のネストも可能です。
[ オブジェクト名 メソッド名 : [オブジェクト名 メソッド名 ] ];
[ オブジェクト名 メソッド名 ] メソッド名 ];
------------------------
すでに AppDelegate.hの#import、@implement、@endの記述はありますので、メソッドの呼び出しを間に記載します。
先頭には、プロトタイプ宣言と同じものを記載し、{}で囲み、中で計算やメソッドの呼び出しを記載するようです。返り値がある場合はC言語と同様にreturn();で返します。
(1)引数のないメソッドの呼び出し方法
[ voice sayHello ]; (voiceという名前のオブジェクトsayHelloメソッドを実行)
[ オブジェクト名(レシーバ名とも言う) メソッド名(セレクタ名とも言う) ];
(2) 引数が1つのメソッドの呼び出し方法
[ voice sayHello: "Hello" ];
[ オブジェクト名 メソッド名 : 引数名 ];
(3) 引数が複数のメソッドの呼び出し方法
[ voice sayHello: "Hello"
speed : 1
pitch : 2 ];
[オブジェクト名 メソッド名+引数1の説明 : 引数1の名前
引数2の説明: (引数2の型) 引数2の名前
:
引数nの説明: (引数nの型) 引数nの名前];
(4)引数のネスト方法
以下のネストも可能です。
[ オブジェクト名 メソッド名 : [オブジェクト名 メソッド名 ] ];
[ オブジェクト名 メソッド名 ] メソッド名 ];
------------------------
Objective-Cのヘッダファイル(*.h)
ヘッダファイルでは、クラスに含まれるインスタンス宣言(オブジェクトのひな形の定義)や、メソッドのプロトタイプ宣言(関数などの呼び出し方を既定する宣言文)を行います。
------------- APPDelegate(標準メソッド等以外の設定先)の例----------------------
#import
@interface Web_blowserAppDelegate : NSObject <UIApplicationDelegate >
{
UIWindow *window;
}
@property (nonatomic, retain) IBOutlet UIWindow *window;
-(IBAction) loadUrl: (UITextField *) sender;
@end
------------------------------------------------------------
解 説
------------------------------------------------------------
★ #import <ヘッダファイル>
他のヘッダを含めて実装する宣言です。C言語では#includeとなりますが、Objective-Cでは#importとし、多重定義を自動で回避してくれるそうです。
-------------------------------------------------------------
★ クラス宣言
@interface @endで囲んで宣言します。
@interface クラス名:スーパークラス<プロトコル1, プロトコル2, ............>
{
インスタンス変数宣言
}
メソッドプロトタイプ宣言
@end
------------------------------------
★ インスタンス変数(フィールド、データメンバ、メンバ変数、属性<呼び方いろいろありすぎ(@@;;>)宣言
型名 変数名;
型には以下のようなものがあります。
・整数型
・実数型
・文字列型
・クラスオブジェクト型(オブジェクトを保持する変数<ポインタ>)
UIWindow *window;
クラスオブジェクト型のUIWindow型の変数(Window)を宣言する場合は上記のようにポインタで宣言します。
-------------------------------------------------------------
★ メソッドプロトタイプ宣言
クラスに対するメソッド(クラスメソッド<インスタンスを生成するメソッド、クラス全体に対する情報取得のメソッド(画像フォーマット等))の場合は”+”、インスタンスに対するメソッドの場合は"ー"を先頭にを書くそうです。
(1)引数<メソッドに渡す値>のないメソッドの場合
-(void) sayHello;
-(返り値の型) メソッド名;
(2)引数<メソッドに渡す値>が一つのメソッドの場合
-(void) sayMessage: (char *) message;
-(返り値の型) メソッド名: (引数の型) 引数の名前;
(3)引数<メソッドに渡す値>が複数のメソッドの場合
-(void) sayMessage: (char *) message
speed:(int ) speed
pitch: (int ) pitch;
-(返り値の型) メソッド名+引数1の説明: (引数1の型) 引数1の名前
引数2の説明: (引数2の型) 引数2の名前
:
引数nの説明: (引数nの型) 引数nの名前;
*)引数の説明は省略化
----------------------------------------------------------------------------------------
この事例では、UITextField * でURLの入力を拾い受け渡すメソッドを定義しています。
返り値にIBActionを指定することで、Interface BuilderのGUIを使ってアクションを結びつけることができます。ファイルを「保存」したあと(でないとできません)、UITextFied のDid End On Exit という入力完了アクションを、Inspectorウインドウ上のApp Deligateにドラックすることで、関係をつけることができます。
------------- APPDelegate(標準メソッド等以外の設定先)の例----------------------
#import
@interface Web_blowserAppDelegate : NSObject
{
UIWindow *window;
}
@property (nonatomic, retain) IBOutlet UIWindow *window;
-(IBAction) loadUrl: (UITextField *) sender;
@end
------------------------------------------------------------
解 説
------------------------------------------------------------
★ #import <ヘッダファイル>
他のヘッダを含めて実装する宣言です。C言語では#includeとなりますが、Objective-Cでは#importとし、多重定義を自動で回避してくれるそうです。
-------------------------------------------------------------
★ クラス宣言
@interface @endで囲んで宣言します。
@interface クラス名:スーパークラス<プロトコル1, プロトコル2, ............>
{
インスタンス変数宣言
}
メソッドプロトタイプ宣言
@end
------------------------------------
★ インスタンス変数(フィールド、データメンバ、メンバ変数、属性<呼び方いろいろありすぎ(@@;;>)宣言
型名 変数名;
型には以下のようなものがあります。
・整数型
・実数型
・文字列型
・クラスオブジェクト型(オブジェクトを保持する変数<ポインタ>)
UIWindow *window;
クラスオブジェクト型のUIWindow型の変数(Window)を宣言する場合は上記のようにポインタで宣言します。
-------------------------------------------------------------
★ メソッドプロトタイプ宣言
クラスに対するメソッド(クラスメソッド<インスタンスを生成するメソッド、クラス全体に対する情報取得のメソッド(画像フォーマット等))の場合は”+”、インスタンスに対するメソッドの場合は"ー"を先頭にを書くそうです。
(1)引数<メソッドに渡す値>のないメソッドの場合
-(void) sayHello;
-(返り値の型) メソッド名;
(2)引数<メソッドに渡す値>が一つのメソッドの場合
-(void) sayMessage: (char *) message;
-(返り値の型) メソッド名: (引数の型) 引数の名前;
(3)引数<メソッドに渡す値>が複数のメソッドの場合
-(void) sayMessage: (char *) message
speed:(int ) speed
pitch: (int ) pitch;
-(返り値の型) メソッド名+引数1の説明: (引数1の型) 引数1の名前
引数2の説明: (引数2の型) 引数2の名前
:
引数nの説明: (引数nの型) 引数nの名前;
*)引数の説明は省略化
----------------------------------------------------------------------------------------
この事例では、UITextField * でURLの入力を拾い受け渡すメソッドを定義しています。
返り値にIBActionを指定することで、Interface BuilderのGUIを使ってアクションを結びつけることができます。ファイルを「保存」したあと(でないとできません)、UITextFied のDid End On Exit という入力完了アクションを、Inspectorウインドウ上のApp Deligateにドラックすることで、関係をつけることができます。
-------------------------------------------------------------
参考:
NSObject:
iPhone OSのクラスのほぼ全てのルートクラス(トップのクラス)だそうです。
参考:
NSObject:
iPhone OSのクラスのほぼ全てのルートクラス(トップのクラス)だそうです。
オブジェクト指向概念の理解(継承、スーパクラス、サブクラス)
クラスの定義を他のクラスに受け継がせることを「継承」と言う。その際、元になるクラスを「スーパークラス」(super class)、あるいは「基底クラス」「基本クラス」(base class)などと呼び、継承により新たに定義されたクラスを「サブクラス」(subclass)、あるいは「派生クラス」(derived class)と呼ぶ。
Object-C/C++で、スーパクラスは1つのみとなり多重継承(複数のクラスから継承)を禁止する一方で、メソッド宣言の集合体(プロトコル)を複数継承する仕組みがあるそうです(Javaと同様)。
Object-C/C++で、スーパクラスは1つのみとなり多重継承(複数のクラスから継承)を禁止する一方で、メソッド宣言の集合体(プロトコル)を複数継承する仕組みがあるそうです(Javaと同様)。
オブジェクト指向概念の理解(オブジェクト、クラス、インスタンス、メソッド)
iPhoneのプログラミングは、主にC言語を拡張したオブジェクト指向言語であるObject-C, Object-C++でコーディングされます。
オブジェクト指向プログラミングにあたっては、その概念の理解が必要となります。
オブジェクト指向プログラミングにおいては、ソフトウェアが扱おうとしている現実世界に存在する物理的あるいは抽象的な実体(オブジェクト)を、属性(データ)と操作(メソッド)の集合として モデル化し、コン ピュータ上に再現します。
オブジェクトを定義するモデルはクラスと呼ばれる。クラスに基づいて実際にコン ピュータのメモリ上に 展開されたオブジェクトのことをインスタンス(実体)と言うが、このインスタンスの意味でオブジェクトと呼ぶ場合も多い。
概念 コード 実行モジュール
オブジェクト ≒ クラス ≒ インスタンス
例えば「名前、身長、体重」というクラスがあるとすれば、そのインスタンスは「田中、175、65」というように作られる。一つのクラスから複数のインスタンスを作ることができ、それぞれのインスタンスは違った値を持ちうる。プログラムの中で実際に扱われるのはクラスではなく、こうして作られたインスタンスの方となる。「○○クラスに属す るインスタンス」「○○クラスのインスタンス」という表現が用いられる。
メソッドのうち、ボタンなどの操作にともない用意するメソッドを「アクションメソッド」といいます。開発者が考え実装します。
また、アプリケーションが起動したときなどに、アプリケーション固有の動作を行うオブジェクトのことを「デリゲート(Delegate、代理人)」と呼び、アプリケーションのデリゲートをとくにアプリケーションデリゲートととも言います。決められたオブジェクトを登録するのみとなります。
アプリケーションデリゲートクラスは、“Files Owner" のdelegateアウトレットと接続します。
クラスに機能を追加するという意味で、サブクラスとデリゲートは同じですが、デリゲートの方が、「場合により」外部に違う処理を依頼できる等柔軟性が高いものとなります。
オブジェクト指向プログラミングにあたっては、その概念の理解が必要となります。
オブジェクト指向プログラミングにおいては、ソフトウェアが扱おうとしている現実世界に存在する物理的あるいは抽象的な実体(オブジェクト)を、属性(データ)と操作(メソッド)の集合として モデル化し、コン ピュータ上に再現します。
オブジェクトを定義するモデルはクラスと呼ばれる。クラスに基づいて実際にコン ピュータのメモリ上に 展開されたオブジェクトのことをインスタンス(実体)と言うが、このインスタンスの意味でオブジェクトと呼ぶ場合も多い。
概念 コード 実行モジュール
オブジェクト ≒ クラス ≒ インスタンス
例えば「名前、身長、体重」というクラスがあるとすれば、そのインスタンスは「田中、175、65」というように作られる。一つのクラスから複数のインスタンスを作ることができ、それぞれのインスタンスは違った値を持ちうる。プログラムの中で実際に扱われるのはクラスではなく、こうして作られたインスタンスの方となる。「○○クラスに属す るインスタンス」「○○クラスのインスタンス」という表現が用いられる。
メソッドのうち、ボタンなどの操作にともない用意するメソッドを「アクションメソッド」といいます。開発者が考え実装します。
また、アプリケーションが起動したときなどに、アプリケーション固有の動作を行うオブジェクトのことを「デリゲート(Delegate、代理人)」と呼び、アプリケーションのデリゲートをとくにアプリケーションデリゲートととも言います。決められたオブジェクトを登録するのみとなります。
アプリケーションデリゲートクラスは、“Files Owner" のdelegateアウトレットと接続します。
クラスに機能を追加するという意味で、サブクラスとデリゲートは同じですが、デリゲートの方が、「場合により」外部に違う処理を依頼できる等柔軟性が高いものとなります。
iPhoneアプリのコーディングの基本
iPhoneで最初に動作するコードが書かれているのが、Other Sourcesにある"main.m"となります。
---- main.m -------------------
#import
int main(int argc, char *argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain(argc, argv, nil, nil);
[pool release];
return retVal;
}
----------------------------------
この場合、main.mから呼び出されるUI Applicationで標準化された処理を実行することになるそうです。
標準化されていない処理を実行させたい場合には、main.mを直接コーディングすることはあまりなく、UI Applicationから標準以外の処理を依頼する"xxxAppDelegate"クラスをコーディングすることになるそうです。
そのため、コーティング対象はClassesフォルダにある、“xxxAppDelegate.m", "xxxAppDelegate.h"上でコーディングしていくことになるそうです。
---- main.m -------------------
#import
int main(int argc, char *argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain(argc, argv, nil, nil);
[pool release];
return retVal;
}
----------------------------------
この場合、main.mから呼び出されるUI Applicationで標準化された処理を実行することになるそうです。
標準化されていない処理を実行させたい場合には、main.mを直接コーディングすることはあまりなく、UI Applicationから標準以外の処理を依頼する"xxxAppDelegate"クラスをコーディングすることになるそうです。
そのため、コーティング対象はClassesフォルダにある、“xxxAppDelegate.m", "xxxAppDelegate.h"上でコーディングしていくことになるそうです。
ボタンを押した際のイベントを設定する。
ボタンを押した際のイベントは、Interface Builderから簡単に設定できます。
InspectorウインドウのConnectionタブにあるRecieved Actionの○を、関連づけたいボタンにドラックすれば完了です。
ただし、このActionがないものについては、コーディングが必要になります。
InspectorウインドウのConnectionタブにあるRecieved Actionの○を、関連づけたいボタンにドラックすれば完了です。
ただし、このActionがないものについては、コーディングが必要になります。
テキストを入力する(UITextField)
iPhoneでテキスト入力を配置する方法の一つ に、UIToolbar(横幅に合わせて部品を配置するための部品)の上に、UITextFieldという部品を置く方法があります。
文字列がないときの補足説明:Placeholder
文字列クリアボタンの表示:Clear Button
文字列編集前に全消去する:Clear When Editing Begins
フォント:
”ヒラギノ角ゴProN W3,W6"表示枠に収まらない場合に文字列を小さくする:Font Size/Adjust To Fit (Min Size)
大文字化を指定する:Capitalize
文字列を訂正する:Correction
キーボードの種類を指定する:Keyboardで、デフォルト/ASCII/数字・記号/URL/数字/電話/アルファベット・電話/メールアドレスの各用途のものが指定できます。
アラートパネル用にする:Appearance
入力完了キーを指定する:Return Keyでデフォルト/Go/Google/Join/Next/Route/Search/Send/Yahoo/Done/Emergency Callから選択できます。
何も入力されないときにReturn-Keyを無効にする:Auto-enable Return key
パスワード入力用:Secure
を使用します。
ボタンを配置する(UIBarButtonItem)
iPhoneでボタンを配置する方法の一つに、UIToolbar(横幅に合わせて部品を配置するための部品)の上に、UIBarButtomItemというボタンを置く方法があります。
ボタンは左から順番に配置されるため、間を開けるには、Flexible Space Bar Buttom Itemというボタンを配置するそうです。
UIBarButtonItem のIDにはその他に以下のものがあるようです。
ちなみに、言葉が入っているボタンは自動で各国の言語に変換してくれるそうで、メチャクチャ便利ですね。
---------------
- Add Edit Done Cancel Save UndoRedo----------------------Compose
- reply
- action
- organize trash----------------------
- bookmarks
- search
- refresh
- stop ----------------------
- camera
- ----------------------
- play
- pause
- rewind
- fast forward
Macでアニメーション
魅力的なアプリを作るには、出だしがアニメーションで始める必要があると考えています。そのためには、アニメを作るMacアプリが必要になるかと思います(Windowsでもいいけど)。
Vectorを見るとこんなソフトがあるようです。
Vectorを見るとこんなソフトがあるようです。
- TSBSimpleAnimator 1.1
複数画像を連結し、ムービーもしくは画像として出力 (08.06.06公開 1,614K) - Choreographer 1.1.0
絵や写真などのイメージファイルに3Dの動きをつけたGifアニメを作成する (07.06.11公開 7,663K) - FreeAnimeStudio2007 7.0.4
Photoshop画像からムービーを作るアニメーション制作ソフト (07.09.21公開 1,461K) - Parara 2.7 《レ ビュー》
カンタンお手軽パラパラあにめ QuickTime ムービー作成スタック (99.11.05公開 59K) - アニメ電 子BOOK
ムービーファイルを参照して簡単に人の動きなどをアニメ化 (97.01.16公開 114K) - PICMO Macintosh 版 1.03
あなたにもできる! 10分でできる! みんな楽しいアニメ制作ソフト (10.03.18公開 35,085K) - Gif・ gIf・giF 68K 1.5.3J
画面上の画像をキャプチャーして、GIF アニメーションを簡単に素早く作成 (00.03.07公開 313K) - EVAア ニメータキッズ for Macintosh 1.20
超簡単アニメ作成ソフト!EVAアニメータキッズfor Macintoshがバージョンアップ! (03.02.18公開 3,000K) - EVAア ニメータキッズ for MacOS X 1.20
超簡単アニメ作成ソフト!EVAアニメータキッズfor MacOS X がバージョンアップ! (03.02.18公開 3,232K) - Anima+ 1.0
アニメーション作成支援 (00.08.18公開 1,970K) - Gif・ gIf・giF PPC 1.5.3J
画面上の画像をキャプチャーして、GIF アニメーションを簡単に素早く作成 (00.03.07公開 335K) - Lily Eight Power Mac版 1.8.7
3Dアニメーションソフト (99.02.10公開 910K) - MoviePaint
アニメーション作成ソフト (03.12.26公開 )
登録:
投稿 (Atom)