2013-02-23 42 views

回答

0

當你使用這個循環:

while (_onButton.selected) { 

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

你是不是允許runloop來處理新的事件,所以這個按鈕永遠不會有機會改變狀態(因爲它不會接收用戶的觸摸)。這很糟糕,你不應該這樣做。

改爲使用聲音代表方法繼續振動,該方法始終保持按鈕處於選定狀態(不顯示如何執行振動,因此我無法在此處提供更多細節)。

編輯從OP評論後:

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

OK,AudioServices通過提供一個AudioServicesAddSystemSoundCompletion()「完成程序」,這將讓你可以重播振動「聲音」所有的按鈕選擇時間。使用此機制而不是while循環。

+0

- (void)vibrate {0} {0} {0} AudioServicesPlaySystemSound(kSystemSoundID_Vibrate); }這是我的振動方法 – 2013-02-23 10:31:16

+0

其實我想在無限循環之間等待,因爲我希望它以用戶決定的間隔振動。我有一個滑塊,我想調用振動方法與間隔 – 2013-02-23 10:34:18

+0

@ArdaKeskiner然後,你需要設置一個計時器在*聲音完成程序*,並在*計時器發射方法*中播放振動聲音。 – trojanfoe 2013-02-23 10:35:11

0

這是一個無限循環隊友。改變while循環是這樣的:

while (_onButton.selected) { 

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

或 而(_onButton.selected){

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

但是,我想要這個循環繼續,直到我停下來「關閉」按鈕 – 2013-02-23 10:30:15

+0

那麼你不能在UIThread中使用infiniteloop,因爲它會阻止用戶界面。嘗試在另一個線程中使用'[self performSelectorInBackground:@selector(myMethod :) withObject:object]'運行此方法;' – 2013-02-23 10:43:26