各設定値の保存

NSUserDefaultsを使い、次の様な流れにするのが良いと思います。

1)初めての起動時、設定値に初期値を保存

2)設定値を読込み、アプリの動作に適用

3)設定画面等で設定変更をしたら、設定値に保存


1)初めての起動時、設定値に初期値を保存

コピペで即動く
    NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];//NSUserDefaults取得
    NSMutableDictionary *defaults = [NSMutableDictionary dictionary];//NSMutableDictionary取得
    //一旦NSMutableDictionaryに全て設定
    [defaults setObject:@"1" forKey:@"KEY_I"];//「KEY_I」という名前で「1」の値(整数)をセット
    [defaults setObject:@"1.2" forKey:@"KEY_F"];//「KEY_F」という名前で「1.2」の値(少数)をセット
    [defaults setObject:@"test" forKey:@"KEY_S"];//「KEY_S」という名前で「test」の値(文字)をセット
    [defaults setObject:@"YES" forKey:@"KEY_B"];//「KEY_B」という名前で「YES」の値(BOOL値)をセット
    [ud registerDefaults:defaults];//設定値を保存

2)設定値を読込み、アプリの動作に適用

 読み込む値の型により、integerForKey、floatForKey、stringForKey、boolForKey等を指定します。

コピペで即ウゴ
    NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];//NSUserDefaults取得
    NSInteger i = [ud integerForKey:@"KEY_I"];//「KEY_I」という名前の設定値を取得
    NSLog(@”%d”,i);
    CGFloat f = [ud floatForKey:@"KEY_F"];//「KEY_F」という名前の設定値を取得
    NSLog(@”%f”,f);
    NSString *s = [ud stringForKey:@"KEY_S"];//「KEY_S」という名前の設定値を取得
    NSLog(@”%@”,s);
    BOOL b = [ud boolForKey:@"KEY_B"];//「KEY_B」という名前の設定値を取得
    NSLog(@”%@”, b ? @”YES” : @”NO”);
NSInteger integerForKey:
float floatForKey:
double doubleForKey:
NSString stringForKey:
BOOL boolForKey:
NSArray arrayForKey:
NSDictionary dictionaryForKey:
NSData objectForKey:
NSURL URLForKey:

3)設定画面等で設定変更をしたら、設定値に保存
書き込む値の型により、setInteger、setFloat、setObject、setBool等とforKeyで名前を指定します。
コピペで即ウゴ
    NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];//NSUserDefaults取得
    [ud setInteger:2 forKey:@"KEY_I"];//「KEY_I」という名前で「1」の値(整数)をセット
    [ud setFloat:2.3 forKey:@"KEY_F"];//「KEY_F」という名前で「1.2」の値(少数)をセット
    [ud setObject:@"TEST" forKey:@"KEY_S"];//「KEY_S」という名前で「test」の値(文字)をセット
    [ud setBool:NO forKey:@"KEY_B"];//「KEY_B」という名前で「YES」の値(BOOL値)をセット
    [ud synchronize];//設定値を保存
NSInteger setInteger:
float setFloat:
double setDouble:
NSString setObject:
BOOL setBool:
NSArray setObject:
NSDictionary setObject:
NSData setObject:
NSURL setURL:

各国の言葉(言語)で処理を変える。

手軽に各言語に対応させたい時はこんなコードを使っています。

@”ja”だと日本語、@”zh-Hans”だと中国語(簡体字)、@”en”だと英語という感じです。

シミュレータや実機での動作確認は、設定▷一般▷言語環境▷言語の順に選択して、言語を切替できます。
コピペで即動く
    //各言語毎に処理
    if ([[[NSLocale preferredLanguages] objectAtIndex:0] isEqualToString:@”ja”]) {
        NSLog(@”日本語処理”);
    }else if ([[[NSLocale preferredLanguages] objectAtIndex:0] isEqualToString:@”zh-Hans”]) {
        NSLog(@”中国語処理”);
    }else if ([[[NSLocale preferredLanguages] objectAtIndex:0] isEqualToString:@”en”]) {
        NSLog(@”英語処理”);
    }else{//
        NSLog(@”その他の言語処理”);
    }

Localizable.strings、NSLocalizedStringでのローカライズが必要無い時には、こちらを使っています。

各言語に対応するコード
コード 言語
ja 日本語
en 英語
zh-Hans 中国語(簡体字)
fr フランス語
de ドイツ語
nl オランダ語
it イタリア語
es スペイン語
pt ポルトガル語
pt-PT ポルトガル語(ポルトガル)
da デンマーク語
fi フィンランド語
nb ノルウェー語[ブークモール]
sv スウェーデン語
ko 韓国語
zh-Hant 中国語(繁体字)
ru ロシア語
pl ポーランド語
tr トルコ語
uk ウクライナ語
ar アラビア語
hr クロアチア語
cs チェコ語
el ギリシャ語
he ヘブライ語
ro ルーマニア語
sk スロバキア語
th タイ語
id インドネシア語
ms マレー語
en-GB 英語(イギリス)
ca カタロニア語
hu ハンガリー語
vi ベトナム語

 

シェイク検出

iPhoneをシェイクした時を検出します。

ViewController.mの一番下 @end の上にコピペで即ウゴです。

実機では少し強めにシェイクしてみてください。

iOSシミュレータでは、メニューのハードウェア▷シェイクジェスチャーで動作します。

コピペで即動く

- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event

{

    // モーションがシェイクジェスチャーの場合には、新しい画面を開く

    if (motion == UIEventSubtypeMotionShake) {

        NSLog(@”シェイク);

    }

}

- (BOOL)canBecomeFirstResponder {return YES;}

 


 

フリック、タッチ検出

上下左右フリックとタッチを検出できます。

ViewController.mの一番下 @end の上にコピペで即ウゴです。

注意)フリックはiPhoneの向きと画面回転の有無で検出する状況も変わります。

iPhone縦向きで右フリック▷右フリック検出

iPhone右横向き(画面は左に回転)で右フリック▷右フリック検出

iPhone右横向き(画面回転せず)で右フリック▷上フリック検出

コピペで即動く

//タッチ開始検出

CGPoint _tB;

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{

    _tB = [ [touches anyObject] locationInView: self.view ];//タッチ開始位置記録

}

//タッチ終了検出

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{

    CGPoint tE = [ [touches anyObject] locationInView: self.view ];//タッチ終了位置記録

    NSInteger xmv = ABS(_tB.x – tE.x);//x方向タッチ移動量

    NSInteger ymv = ABS(_tB.y – tE.y);//y方向タッチ移動量

    if((xmv < 50)&&(ymv < 50)){//タッチの移動量が50以下ならタッチ

        NSLog(@”タッチ);

        return;

    }

    if ( xmv < ymv ) {          //Y方向の移動量が多い場合 上下フリック

        if ( _tB.y > tE.y ) {   //タッチ 開始位置>終了位置 上フリック

            NSLog(@”上フリック);

        } else {                //タッチ 開始位置<終了位置 下フリック

            NSLog(@”下フリック);

        }

    } else {                    //X方向の移動量が多い場合 左右フリック

        if ( _tB.x > tE.x ) {   //タッチ 開始位置>終了位置 左フリック

            NSLog(@”左フリック);

        } else {                //タッチ 開始位置<終了位置 右フリック

            NSLog(@”右フリック);

        }

    }

}