UIB кнопка щелчка на ощупь - куда ее поставить? - PullRequest
0 голосов
/ 14 июля 2011

В моем приложении есть особая ситуация, когда мне нужно, чтобы касание UIButton сопровождалось звуком щелчка, аналогичным тому, который используется на системной клавиатуре.

Я делаю это сейчас на toucesBegan:вызов - самый ранний, о котором я мог подумать, - но, тем не менее, во многих случаях (особенно на более медленных устройствах) звук задерживается и весь смысл пропускается - пользователь мог коснуться другой кнопки до того, как прозвучит первый звук.

Это не происходит на системной клавиатуре и не происходит в некоторых других приложениях, которые я использую, поэтому они должны делать это правильно: -)

Где я долженпоставить код клика, чтобы он звучал, как только пользователь коснется экрана?Я бы предпочел сделать это в месте, где мне не нужно проверять себя, находится ли касание в пределах кнопки, но если это единственный выбор, то я готов это сделать.

Имеет ли значение метод, используемый для создания звука?Сейчас я использую AudioServicesPlaySystemSound, это самый простой способ.

Спасибо.

Ответы [ 2 ]

5 голосов
/ 14 июля 2011

Как сказал DarkDust, почему вы не используете addTarget:action:forControlEvents:?

У меня отлично работает:

[button addTarget:self action:@selector(playClick)  forControlEvents:UIControlEventTouchUpInside];

-(IBAction)playClick{
    NSString *effect;
    NSString *type;
    effect = @"Tink";
    type = @"aiff"; 
    SystemSoundID soundID;
    NSString *path = [[NSBundle mainBundle] pathForResource:effect ofType:type];
    NSURL *url = [NSURL fileURLWithPath:path];
    AudioServicesCreateSystemSoundID ((CFURLRef)url, &soundID);
    AudioServicesPlaySystemSound(soundID);  
}
1 голос
/ 14 июля 2011

Вызовы touchesBegan:withEvent: могут быть задержаны, если у вас подключен UIGestureRecognizer. Поэтому вы должны убедиться, что в представлении нет распознавателя жестов.

Вы также можете использовать addTarget: action: forControlEvents: с событием UIControlEventTouchDown.

...