iPhoneアプリ開発学校に通う生徒のおおまかな学習日報

Objective-C初心者。iPhoneアプリ開発学校に通う落ちこぼれです。授業の内容を記録しているのですが時間の都合でおおまかに書いてます。投稿内容は参考にしちゃだめです。

【火曜日】加速度センサーの続き

睡眠時間7時間。

加速度センサーの続きから。
手振れなどにより一瞬だけ力がかかってしまうのを除去するのがローパスフィルタ。
常にかかっている重力などの影響を除去するのがハイパスフィルタ(強く振ると感知してくれる)らしい。

↓こういうコードを入れた

// 加速度通知時に呼ばれる
-(void)accelerometer:(UIAccelerometer*)accelerometer didAccelerate:(UIAcceleration*)acceleration {
    
    // 加速度にローパスフィルタをあてる
    _aX=(acceleration.x*FILTERING_FACTOR)+(_aX*(1.0-FILTERING_FACTOR));
    _aY=(acceleration.y*FILTERING_FACTOR)+(_aY*(1.0-FILTERING_FACTOR));
    _aZ=(acceleration.x*FILTERING_FACTOR)+(_aZ*(1.0-FILTERING_FACTOR));
    
    // ハイパスフィルタ適用
    float ahX = acceleration.x -_aX;
    float ahY = acceleration.y -_aY;
    float ahZ = acceleration.z -_aZ;
    
    if(ahZ > 2) {
        NSLog(@"Z軸で2を超えた!");
    }
    
    // ラベルの更新
    NSMutableString* str=[NSMutableString string];
    [str appendString:@"加速度センサーだよ\n\n"];
    [str appendFormat:@"X軸加速度:%+.2f\n",_aX];
    [str appendFormat:@"Y軸加速度:%+.2f\n",_aY];
    [str appendFormat:@"Z軸加速度:%+.2f\n\n",_aZ];
    [str appendFormat:@"ハイパス後X:%+.2f\n",ahX];
    [str appendFormat:@"ハイパス後Y:%+.2f\n",ahY];
    [str appendFormat:@"ハイパス後Z:%+.2f\n\n",ahZ];
    [str appendFormat:@"端末の向き:%@",_orientation];
    _label.text=str;
    [self resizeLabel:_label];
}

▼こういった画面
f:id:jaam:20131015151134p:plain

実機を強く振った際に床に落とした生徒がいたぞw


次に、加速度センサーを使って強く振られた場合のみに画像を変化させる課題。
(そんでもって、変化させた画像を3秒間表示させたままにする。あと、30回ほど強く振ったら何かイベントを表示させる)
よーい、どん!

…………………しばらく考えたけどわからなかったので先生にヒントをもらった。
そのあとは、自力で解けた。

▼最初の画面
f:id:jaam:20131015151206p:plain

▼強く振ると(ハイパスフィルタをかけた値(X軸、Y軸,Z軸いずれか)が1.3を超えたら)画像が変わる
f:id:jaam:20131015151213p:plain

▼3秒たつと画像が戻る(私はaccelerometerメソッドに入る回数をカウントして、その数が約3秒間になるようにしたりしたけど、もっとスマートなやり方がありそう)
f:id:jaam:20131015151220p:plain

▼30回強く振ったらイベントが(文字が表示されるようにした…地味だけど)
f:id:jaam:20131015151226p:plain


次に、iPhoneの回転に関係するUIViewControllerのメソッドの勉強。
iPhoneを90度回転したときに画面の中のレイアウトをどうするか、とか、そこらへん。


終了時間がきた。
今日はこれまで。