iPhone sdkサイトにあるサンプルコードをアレンジして、やっと自由自在に画面に文字列を出力することができたので、自作テンプレートを公開しようかなと。
(前提条件として、Interface Builderを使わずコーディングし、プロジェクト名を「output_text.xcodeproj」とします。)
ただ、単純に文字列を出力するだけなので、テンプレートもくそもないのですが、すごくうれしかったので♪
プログラムの流れの順に公開
iPhone sdkは、main.mが最初に実行されるので、まずは、main.mから。
(おそらくこれは、アプリを開発する言語がCとObjective-Cで構成されているので、main.mからスタートすると考えられる。)
#import <UIKit/UIKit.h> |
実際のところ何も変わっていません。
デフォルトの状態です。
次は、文字列を格納、出力位置、文字の色を格納するインターフェースset_text.hを実装
#import <UIKit/UIKit.h> |
このset_textは、UIViewクラスを継承して、{}の中にある4つの変数を宣言しています。
と同時に、プロパティとして{}の後ろで宣言しています。
ちなみに、「readwrite」は、読み書き可能、「retain」は、iPhone sdkプログラミングには、「オブジェクトにretainメッセージを送る」と書かれていて納得できないのですが、英語で「保持する」と書いてあったので、入れました。
この場合、変数の情報を保持してくれないと困るので。
また、CGPointに入れていない理由ですが、最初入れたら、エラーか警告がでたので、はずしました。
ここで、Javaと大きく違うのは、同じクラスを作成するにしても、まず、「●●●.h」でだいたいの骨組みを作って次に紹介する、「set_text.m」で肉付けをします。
ちなみに上のインターフェースは、Javaのインターフェースとは、違い、Objective-Cの場合は、プロトコルという名前になります。
で、次に、肉となる「set_text.m」
#import "set_text.h" |
「set_text.h」で宣言したプロパティを使う場合、「@synthesize」が必要なので、忘れずに追加。
initWithFrameメソッドは、UIViewクラスを初期化するのに必要なので、このままにしておく。
(というか、このメソッドは、ファイルを作った時に既にあるので、その設定のままにしておいただけです。)
で、drawRectメソッドは、viewの所定の位置に、設定されたフォントの色と大きさで書き込むメソッドです。
deallocはメモリを解放します。
iPhone sdkはJavaのようなガベージコレクションがないので、手動で解放しなければなりません。
ガベージコレクションについては、schemeにもでてくるので、後々考察したいポイントです。
次に、今回のプロジェクトの名前がoutput_textなので、実行部である「output_textAppDelegate.h」を見てみます。
#import <UIKit/UIKit.h> |
ここもファイルを作った時から変更を加えていません。
で、最後に、「output_textAppDelegate.m」です。
#import "output_textAppDelegate.h" |
上のapplicationDidFinishLaunchingは、アプリケーションを稼働する直前にコールされるメソッドで、初期設定を行うところです。
set_text型のオブジェクトを定義し、出力する文字列、位置、フォント、色を設定します。
文字列は、output_text型のtextメソッドで設定。
(いわゆる、setterです。)
位置は、CGPointMake関数で設定、第一引数は、x軸、第二引数は、y座標。
フォントは、UIFont型のsystemFontOfSizeメソッド、いわゆるクラスメソッドですね。
色もUIColor型のwhiteColorメソッドで、こちらもクラスメソッド。
でも、これだけだと、色の設定が完了しきれていなくて、最後に、setメソッドを呼ぶ必要があります。
(これは、set_text.mにあるself.color setで実現)
で、これでオールオッケーのように思いますが、実際これでビルドして実行しても何も表示されなくて、最後に、ウィンドウに貼付けるという作業が残っています。
それが、window型のaddSubviewメソッドです。
ビルド後の実行結果を貼付けておきます。
基本的には、再利用可能なので、是非、使ってみてください。
「バグがあるんですけどー」、「こっちの方がメモリーの効率がよくていいと思いますよー」など、意見がありましたら、ドシドシ、コメント、トラックバックなりでいただけると幸いです。
いつになく、こういった意見を求めている理由は、
1.組み込み系のアプリを作るのが初だから
2.オブジェクト指向の言語に真剣に取り組んだのが初だから
3.Objective-Cの仕様を完璧に把握してないから
4.iPhone sdkの仕様の理解度がまだまだ低いから
があります。
まだ、もうちょい今回のエントリーに関して書きたいことがあるのですが、さすがに長くなっていると思うので、いったん、閉じます。
0 コメント:
コメントを投稿