Могу ли я отключить прокрутку звука UIPickerView?
Я хочу отключить раздражающие клики, которые генерирует UIPickerView при прокрутке вверх и вниз. Есть ли способ сделать это? Я хочу воспроизводить короткие звуки для каждого элемента, на который попадает изображение выбора. Он разрушается встроенным звуком.
Я понимаю, что звуковые сигналы выбора можно отключить глобально, отключив звуки клавиатуры в настройках iPhone/iPod. Но есть ли способ программно сделать это?
Любая помощь будет очень признательна!
Спасибо
Ответы
Ответ 1
После использования этого конкретного недокументированного api в течение года в App Store Apple, наконец, попросила меня удалить его из моего приложения. Это очень неприятно для звуковых приложений, которые имеют этот проклятый звук щелчка. Лучший совет - поделиться с пользователями тем, что звук выбора может быть отключен глобально в приложении настроек в разделе "Звуки" и установке "Клавишные клики" на "Выкл.". Я также настоятельно рекомендую посетить https://bugreport.apple.com/ и подавать ошибку для UIPickerView, так как это может вызвать искажение в звуковых приложениях при нажатии на стрелку выбора.
Ответ 2
Я боролся с проблемой звука UIPickerView, и хотя это только частично относится к исходному вопросу, я размещаю проблему/решение здесь, потому что этот вопрос продолжает появляться в моих результатах поиска, поэтому я думаю, что кто-то еще в этой же лодке тоже может оказаться здесь...
Мне нужно было инициализировать UIPickerView для восстановления текущей выбранной строки из сохраненных данных. Простой, не так ли? В viewDidLoad просто вызовите selectRow: inComponent: анимированный метод UIPickerView:
[myPicker selectRow:currentRowIndex inComponent:0 animated:NO];
Это работает так, как ожидалось, но имеет побочный эффект: он генерирует один звук "click", как если бы пользователь прокрутил элемент управления. Звук щелчка возникает только при работе на устройстве (а не в симуляторе), и только если на устройстве установлено iOS 3.x(я тестировал с 3.1.3 и 3.2). По-видимому, это была ошибка в iOS, которая была исправлена с iOS 4.0. Но если вам нужно настроить iPhone Gen1, вы застряли с iOS 3.1.3, где присутствует эта проблема.
Я обсуждал проблему с Apple DTS, но они не могли предложить никаких обходных решений, кроме обновления до 4.0. Я спросил, будут ли они делать исключение и разрешить использование недокументированного setSoundsEnabled, упомянутого выше (что фактически решает проблему). Ответ был: "Исключений нет".
После некоторой дополнительной детективной работы я обнаружил, что вы можете предотвратить появление звука, временно удалив UIPickerView из супервизора, вызовите selectRow, а затем снова добавьте его в супервизор. Например, в viewDidLoad:
UIView *superview = [myPicker superview];
[myPicker removeFromSuperview];
[myPicker reloadAllComponents];
[myPicker selectRow:currentRowIndex inComponent:0 animated:NO];
[superview addSubview:myPicker];
Это избавляет от постороннего звука щелчка, не используя недокументированные/частные API, поэтому должен пройти процесс утверждения Apple.
Ответ 3
они только что отклонили мое приложение, потому что использование недокументированных api... это один из них.
Ответ 4
Существует недокументированный способ (я на самом деле не уверен, что он все еще доступен в iphone 3.0), но здесь он каким-либо образом
#import <UIKit/UIKit.h>
@interface SilintUIPickerView: UIPickerView
{ }
- (void) setSoundsEnabled: (BOOL) enabled;
@end
используйте этот подкласс и вызовите [view setSoundsEnabled: NO]
Мне интересно узнать, как это происходит в последнем SDK, дать ему шанс и сообщить нам.
Ответ 5
Кто-то, кого я знаю, говорит, что он прошёл последнюю версию App Store только на прошлой неделе:
// Hide private API call from Apple static analyzer
SEL sse = NSSelectorFromString([NSString stringWithFormat:@"%@%@%@", @"set",@"Sounds",@"Enabled:"]);
if ([UIPickerView instancesRespondToSelector:sse]) {
IMP sseimp = [UIPickerView instanceMethodForSelector:sse];
sseimp(self.thePicker, sse, NO);
}
Ответ 6
Может ли этот трюк работать? Кто-то смог подавить звуковой эффект затвора камеры, воспроизведя перевернутую копию звука в тот же момент: fooobar.com/questions/15544/...
Ответ 7
Возможно, это не ответ на этот конкретный вопрос, но у меня была аналогичная проблема - установите minimumDate для datePicker, и я хотел установить его без раздражающего звука "click". Через некоторое время найдено очень простое решение:
datePickerCustomTime.minimumDate = [[NSDate date] dateByAddingTimeInterval:300]// min time to set = now + 5 min
[datePickerCustomTime setDate:[[NSDate date] dateByAddingTimeInterval:300] animated:NO];
Ответ 8
Я нашел небольшое быстрое решение для этой попытки ниже
UIPickerView *pickerView = [[UIPickerView alloc] initWithFrame:CGRectMake(0, yPickerView, VIEW_WIDTH, PICKERVIEW_HEIGHT)];
pickerView.delegate = self;
pickerView.dataSource = self;
pickerView.showsSelectionIndicator = YES;
pickerView.alpha = 0.8f;
pickerView.tag = fieldTag;
[pickerView selectRow:pickerViewSelectedIndex inComponent:0 animated:NO];
установите анимированный: НЕТ для selectRow: method