美女Linux on iPhoneを作る(1)

電子書籍アプリとは別に、ごく簡単な「美女Linux on iPhone」を作ってみます。
まあ、電子書籍アプリのほうは、UIViewContoller 絡みがややこしそうなので、そのあたりベタベタに書こうと思って(所詮、スクリプトで出力させるわけだし)。

目的としては
・独立した iPhone アプリができればよい。
・Apple Store に無料版として up できればよい。
ってところですね。

「無料版」を up させるところが練習なわけで、最終的には「有料版」(美女Linuxじゃないけど)ができることが最終目標。
「独立した」というのは、ネットワークに接続せずに画面切り替え、ってところです。最終的にはしかるべき web サイトから画像をダウンロードするわけですが、3G 契約だったりすると通信料の課金の関係から、ネットにつなぐ/つながないはシビアに考えたほうがよいですよね。日本の携帯電話の場合、そのあたり通信回線に接続するのにシビアなのに、iPhone アプリがルーズなのが気になるところです(まぁ、広告を表示するのに、いちいち「回線に接続するか?」と問い合わせるのも変な話なんですしょうが、一応、apple の指針では回線接続の場合には問い合わせが推奨のようです)。

iPhone で動いている画像があればよいのですが、iPhone では iPhone を写せないというジレンマが(笑)、あるので、開発中の画面なぞ(実機でも動いています。画像は非常にきれいです)。

<001>

本来は、練習として 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 に公開してみよう。

カテゴリー: Objective-C, iPad パーマリンク