iPhoneのシステムサウンド

AudioToolbox.frameworkを追加(youtube)してから使います。

1000という番号を変えると、いろいろな音が出せます。

iOSシミュレータでは音が鳴りません。

コピペで即ウゴ
AudioServicesPlaySystemSound(1000);

実際に聞いてみないと、雰囲気がわからないので、番号をいろいろかえて 試してみてください。

1000~1036 よく使われる感じのシステム音系

1050~1057 分類のできない感じのいろいろな音系

1070~1075 電話っぽいプー音系

1100~1118 短い音、シャッター、接続、切断な感じの音系

1150~1154 電話のベル、プップップッ系

1200~1211 電話のピッポッパ系

1254~1259 プーピッ、ポポ、ポペッ、ププ、ピーププ系

1300~1336 メール、ジングル、効果音的な系

設定▷サウンド▷バイブレーションの着信音有り、着信音なしのどちらか、または両方がオンになっているとバイブが作動する音があります。


アクティブインジケータ

アクティブインジケータとはこれです。

アクティブインジケータ くるくる

1)まずは、アクティブインジケータを用意します。

ViewController.mの一番上あたり #import ”ViewController.h” の下等に貼付けてください。

これでアクティブインジケータをViewController.m内のどこからでも、設定、動作をさせる事ができます。

コピペで即ウゴ

UIActivityIndicatorView *_ai;

次は、viewDidLoadの中等に貼付けてください。

これで、アクティブインジケータの設定ができます。

コピペで即ウゴ

    //アクティブインジケータ

    _ai = [[UIActivityIndicatorView alloc] init];

    _ai.center = self.view.center;//中央に表示

    _ai.activityIndicatorViewStyle = UIActivityIndicatorViewStyleWhiteLarge;//種類指定(3種類から選べます)

//    _ai.activityIndicatorViewStyle = UIActivityIndicatorViewStyleGray;//種類指定(3種類から選べます)

//    _ai.activityIndicatorViewStyle = UIActivityIndicatorViewStyleWhite;//種類指定(3種類から選べます)

コピペで即ウゴ

2)アクティブインジケータを動かします。

ここでは、タッチしている間だけ動く様にしています。

(タッチ等の動きについてはこちらをご参照ください。)

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

コピペで即ウゴ

//この例では、タッチしている間だけアクティブインジケータが作動します。

//タッチ開始検出

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

    [_ai startAnimating];//アクティブインジケータ開始

}

//タッチ終了検出

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

    [_ai stopAnimating];//アクティブインジケータ停止

}

 

 


各設定値の保存

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(@”右フリック);

        }

    }

}