電子書籍アプリとは別に、ごく簡単な「美女Linux on iPhone」を作ってみます。
まあ、電子書籍アプリのほうは、UIViewContoller 絡みがややこしそうなので、そのあたりベタベタに書こうと思って(所詮、スクリプトで出力させるわけだし)。
目的としては
・独立した iPhone アプリができればよい。
・Apple Store に無料版として up できればよい。
ってところですね。
「無料版」を up させるところが練習なわけで、最終的には「有料版」(美女Linuxじゃないけど)ができることが最終目標。
「独立した」というのは、ネットワークに接続せずに画面切り替え、ってところです。最終的にはしかるべき web サイトから画像をダウンロードするわけですが、3G 契約だったりすると通信料の課金の関係から、ネットにつなぐ/つながないはシビアに考えたほうがよいですよね。日本の携帯電話の場合、そのあたり通信回線に接続するのにシビアなのに、iPhone アプリがルーズなのが気になるところです(まぁ、広告を表示するのに、いちいち「回線に接続するか?」と問い合わせるのも変な話なんですしょうが、一応、apple の指針では回線接続の場合には問い合わせが推奨のようです)。
iPhone で動いている画像があればよいのですが、iPhone では iPhone を写せないというジレンマが(笑)、あるので、開発中の画面なぞ(実機でも動いています。画像は非常にきれいです)。
本来は、練習として interface builder を使いたいところなのですが、まだ使い方がわからないので、ベタに記述します。
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad
{
[super viewDidLoad];
_page = 1;
// 背景画像を UIImage, UIImageView で作成
NSString *backName = [NSString stringWithFormat:@"iphone_back%02d.png", _page ];
NSLog( @"%@", backName );
UIImage *back = [[UIImage imageNamed:backName] autorelease];
UIImageView *backview = [[[UIImageView alloc] initWithImage:back] autorelease];
backview.frame = self.view.bounds;
[self.view addSubview:backview];
// タイマーイベントで使うので保存しておく
_backview = backview;
// 「次へ」ボタンの作成(デバッグ用)
// UIButton *btnNext = [UIButton buttonWithType:UIButtonTypeRoundedRect];
UIButton *btnNext = [UIButton buttonWithType:UIButtonTypeCustom];
[btnNext setTitle:@"NEXT" forState:UIControlStateNormal];
[btnNext setFrame:CGRectMake(0,0, 50, 50 )];
[btnNext addTarget:self action:@selector(btnNextDidPush) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:btnNext];
// 日付を表示する
UILabel *lblClock = [[UILabel alloc] init];
lblClock.frame = CGRectMake(0, 50, 300, 50);
NSDate *now = [NSDate date];
NSDateFormatter *fmtr = [[NSDateFormatter alloc] init] ;
[fmtr setDateFormat:@"yyyy/MM/dd HH:mm:ss"]; // 日付のフォーマット
lblClock.textColor = [UIColor whiteColor];
lblClock.backgroundColor = [UIColor clearColor]; // 背景を透明にする
lblClock.font = [UIFont fontWithName:@"AppleGothic" size:20];
lblClock.text = [fmtr stringFromDate:now];
[self.view addSubview:lblClock];
[fmtr release];
_lblClock = lblClock;
// 日時切り替え用のタイマー(1秒間隔)
_timer = [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(onTimerClock:) userInfo:nil repeats:YES];
// 画像切り替え用のタイマー(15秒間隔)
_timer = [NSTimer scheduledTimerWithTimeInterval:15.0f target:self selector:@selector(onTimer:) userInfo:nil repeats:YES];
}
// 次へボタン
- (void)btnNextDidPush {
_page++;
if ( _page > 3 ) _page = 1;
// 新しい UIImage を作成
NSString *backName = [NSString stringWithFormat:@"iphone_back%02d.png", _page ];
UIImage *back = [[UIImage imageNamed:backName] autorelease];
// UIImageView に設定する
[_backview setImage:back];
}
// タイマーで切り替え
- (void)onTimer:(NSTimer*)timer {
NSLog(@"on timer");
_page++;
if ( _page > 3 ) _page = 1;
// btnNextDidPush と同じことをやっているが、まぁ、いいか(コピー&ペーストで)
NSString *backName = [NSString stringWithFormat:@"iphone_back%02d.png", _page ];
UIImage *back = [[UIImage imageNamed:backName] autorelease];
[_backview setImage:back];
}
// 日時の表示
- (void)onTimerClock:(NSTimer*)timer {
// このあたりも、viewDidLoad とダブっているけど、まぁ良しとする。
NSDate *now = [NSDate date];
NSDateFormatter *fmtr = [[NSDateFormatter alloc] init] ;
[fmtr setDateFormat:@"yyyy/MM/dd HH:mm:ss"];
_lblClock.text = [fmtr stringFromDate:now];
[fmtr release];
}
美女Linuxの画像は iPhone4 用に 960×640 で用意しておきます。縦横比が写真と異なるので加工が必須ですね(拡大縮小をしてもいいんでしょうけど、綺麗さが損なわれるのでやめます)。
シミュレーターを動かしながら、try & error を繰り返すわけですが、このぐらいのコードであれば 2 時間で書けるようになりました(2時間も掛かるという話もあるッ!!!)。NSDateFormatter の使い方がわからんとか、NSTimer は autorelease しちゃいけないとか、落ちるところには落ちまくったので、もう一度作るときはまぁ大丈夫です。
大枠はできたので、他に加工するところは、
・日時表示をもう少し綺麗に
・美女Linux のロゴを表示(透過PNGを使う)
・画像の切り替えをアニメーションで(お手軽にできれば)
・美女Linux のロゴをクリックしたら、通信回線を調べて、ブラウザで表示。
ぐらいですかね。ある程度できたら、さっさと apple store に公開してみよう。

