(サンプル) 加速度センサーで画像を動かす

先日の本を読みつつ、少しずつコードを書いていこうと思ってます。

iPhoneプログラミングUIKit詳解リファレンス

iPhoneプログラミングUIKit詳解リファレンス

この本もいっぺん通り読んだのですが、
実際にコードを書いて試していなかったので、
ケース別に書いて試していこうと思っています。
部分部分をクラスにして再利用していければと思います。

加速度センサーのサンプルをまず試しに書いて実行を・・・
と思ったのですが書きながら?なところや不明瞭なところがあちらこちらに・・・


□deallocメソッド
ARCを用いている場合、明示的に書く必要ないみたい。
また親クラスのdeallocメソッドも明示的に呼び出してはいけないみたい。

[super dealloc];

と書いた時点で!出ました。
メモリ管理のこの部分はARCが自動で行ってくれるので変に触れない方がいいみたい。
ARCのことも深く知らないですが・・・。メモリ管理難しい。

Objective-C ARCによるメモリ管理
http://cx5software.com/blog/2011/12/31/objective-c-memory_management_by_arc/

Objective-C メモリ管理 確保と解放
http://apple.creator.ms/objective-c-002.html

delegate
処理を委託して一括管理させる為に使用、効率よくするために。
デリゲート元は宣言し、デリゲート先が実装を行い処理を任せる(ハンドリングを行う)
イベント発生時の検出をデリゲート元が行えばよく、実装部分を一括管理出来る。
というふうに考えているのですが・・・それで本当にあってるの?難しい。

http://mycode.snow69it.com/コーディング/言語/objective-c/【objective-c】デリゲートを実装する/


//加速度センサーからの値を取得開始

    UIAccelerometer* accelerometer = [UIAccelerometer sharedAccelerometer];
    accelerometer.updateInterval = 1.0 / 60.0;  //60Hz(1秒に60回更新)
    accelerometer.delegate = self;

//加速度センサーからの通知

-(void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration{
    speedX_ += acceleration.x;  //x軸方向へ転がるスピードを加速させる
    speedY_ += acceleration.y;  //y軸方向へ転がるスピードを加速させる
    CGFloat posX = imageView_.center.x + speedX_;   //スピード分ボールをx軸方向への移動
    CGFloat posY = imageView_.center.y + speedY_;   //スピード分ボールをy軸方向への移動
    //端に当たったら跳ね返る
    if (posX < 0.0) {
        posX = 0.0;
        speedX_ *= -0.4;    //0.4倍の速度で跳ね返る
    }else if (posX > self.view.bounds.size.width) {
        posX = self.view.bounds.size.width;
        speedX_ *= -0.4;    //0.4倍の速度で跳ね返る
    }
    if (posY < 0.0) {
        posY = 0.0;
        speedY_ *= -0.4;    //0.4倍の速度で跳ね返る
    }else if (posY > self.view.bounds.size.height) {
        posY = self.view.bounds.size.height;
        speedY_ *= -0.4;    //0.4倍の速度で跳ね返る
    }
    imageView_.center = CGPointMake(posX, posY);
}

mac上だとセンサーの確認出来ないのでなんとも言えないですが・・・
バイス登録しなおして確認してみよう。それまで保留。