在我的小应用程序中,用户单击“开启”按钮然后我调用带有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;
}
答案 0 :(得分:0)
这是一个无限的循环伴侣。像这样改变while循环:
while (_onButton.selected) {
[self vibrate];
NSLog(@"working");
_onButton.selected = NO;
}
或 while(_onButton.selected){
[self vibrate];
NSLog(@"working");
break;
}
答案 1 :(得分:0)
当你使用这个循环时:
while (_onButton.selected) {
[self vibrate];
NSLog(@"working");
}
您不允许runloop处理新事件,因此该按钮永远不会有机会更改状态(因为它不会接收来自用户的触摸)。这非常糟糕,你不应该这样做。
使用声音委托方法继续振动,这种方法一直持续选择按钮(你没有显示你的振动方式,所以我不能在这里提供更多细节)。
编辑在OP评论后发表:
- (void)vibrate
{
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
}
好的,AudioServices通过AudioServicesAddSystemSoundCompletion()
提供“完成程序”,这样您就可以在选择按钮时重放振动“声音”。使用此机制而不是while
循环。