2

私の小さなアプリでは、ユーザーが[ON]ボタンをクリックしてから、whileループでメソッドを呼び出すと、[OFF]ボタンが表示されますが、[OFF]ボタンが表示されません。

-(void) myMethod{

    while (_onButton.selected) {

        [self vibrate];
         NSLog(@"working");
    } 
}


- (IBAction)on:(id)sender {

    _offButton.hidden=NO;
    _offButton.selected=NO;
    _onButton.hidden=YES;
    _onButton.selected=YES;

       [self myMethod];


}

- (IBAction)off:(id)sender {

    _onButton.hidden=NO;
    _offButton.hidden=YES;
    _onButton.selected=NO;
    _offButton.selected=YES;
}
4

2 に答える 2

0

無限ループメイトです。次のようにwhileループを変更します。

while (_onButton.selected) {

[self vibrate];
 NSLog(@"working");
_onButton.selected = NO;
}

またはwhile(_onButton.selected){

[self vibrate];
 NSLog(@"working");
break;
}
于 2013-02-23T10:27:14.770 に答える
0

このループを使用している場合:

while (_onButton.selected) {

    [self vibrate];
     NSLog(@"working");
} 

runloopが新しいイベントを処理することを許可していないため、ボタンは状態を変更する機会がありません(ユーザーからのタッチを受け取らないため)。これは非常に悪いので、これを行うべきではありません。

代わりに、ボタンが選択されている間ずっと継続するサウンドデリゲートメソッドを使用してバイブレーションを継続します(バイブレーションの実行方法は表示されないため、ここでは詳しく説明しません)。

OPからのコメント後の編集:

- (void)vibrate
{
    AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
} 

AudioServicesAddSystemSoundCompletion()OK、AudioServicesは、ボタンが選択されている間、振動の「音」を再生できる「完了手順」を提供します。whileループではなく、このメカニズムを使用してください。

于 2013-02-23T10:28:37.953 に答える