1

我正在编写一个 iPhone 应用程序,该应用程序需要反复振动,直到用户停止它,我正在使用一个由线程调用的循环来执行此操作,如下所示:

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

但是,当我从 iPhone 而不是 Xcode 运行应用程序时,振动不会发生。但是当在 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 回答