1

私は、ユーザーが停止するまで繰り返し振動する必要があるiPhoneアプリをプログラミングしており、次のようなスレッドによって呼び出されるループを使用してプログラミングしています。

-(void)vibrateLoop {
    while (1) {
        sleep(0.5);
        if (!vibrate) {
            [NSThread exit];
            return;
        }
        AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
    }
}

ただし、XcodeからではなくiPhoneからアプリを実行すると、バイブレーションが発生しなくなります。ただし、デバッグモードのXcodeで実行すると、電話は想定どおりに振動します。何が起こっている?

4

2 に答える 2

0

グラフィックサービスフレームワークライブラリを使用してみませんか。方法があります

void GSEventVibrateForDuration(float secs);

secsを1に設定して、このメソッドをループで呼び出し続けることができます。ユーザーが停止したい場合は、次のメソッドGSEventStopvibrator()を使用します。

重要:グラフィックサービスフレームワークライブラリはプライベートライブラリであるため、それを使用することにした場合、アプリをアプリストアに送信することはできません。

于 2013-01-02T06:43:15.907 に答える
0

代わりに、Play呼び出しをメソッドに入れ、繰り返しに設定されたタイマーを使用してそのメソッドを呼び出してみてください。例えば

  -(void)vibrateLoop {

    if (!vibrate) {

        return;
    }
    [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(vibrateLoop) userInfo:nil repeats:NO];
    AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);

}

//somewhere else in code
[NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(vibrateLoop) userInfo:nil repeats:NO];
于 2013-01-02T03:30:53.400 に答える