電子書籍アプリとは別に、ごく簡単な「美女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 に公開してみよう。