電子書籍アプリとは別に、ごく簡単な「美女Linux on iPhone」を作ってみます。
まあ、電子書籍アプリのほうは、UIViewContoller 絡みがややこしそうなので、そのあたりベタベタに書こうと思って(所詮、スクリプトで出力させるわけだし)。
目的としては
・独立した iPhone アプリができればよい。
・Apple Store に無料版として up できればよい。
ってところですね。
「無料版」を up させるところが練習なわけで、最終的には「有料版」(美女Linuxじゃないけど)ができることが最終目標。
「独立した」というのは、ネットワークに接続せずに画面切り替え、ってところです。最終的にはしかるべき web サイトから画像をダウンロードするわけですが、3G 契約だったりすると通信料の課金の関係から、ネットにつなぐ/つながないはシビアに考えたほうがよいですよね。日本の携帯電話の場合、そのあたり通信回線に接続するのにシビアなのに、iPhone アプリがルーズなのが気になるところです(まぁ、広告を表示するのに、いちいち「回線に接続するか?」と問い合わせるのも変な話なんですしょうが、一応、apple の指針では回線接続の場合には問い合わせが推奨のようです)。
iPhone で動いている画像があればよいのですが、iPhone では iPhone を写せないというジレンマが(笑)、あるので、開発中の画面なぞ(実機でも動いています。画像は非常にきれいです)。
本来は、練習として interface builder を使いたいところなのですが、まだ使い方がわからないので、ベタに記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | // 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 に公開してみよう。