Мне было интересно, как лучше всего реализовать генератор кода Морзе. Это будет работать так: пользователь вводит слово или фразу, а затем этот NSString будет передан в мой метод в качестве аргумента для обработки. Способ, которым я хочу обработать, состоит в том, чтобы циклически проходить через каждый символ в строке и затем воспроизводить правильную последовательность тонов, когда я иду. Я уже реализовал механизм в отдельном классе.
Я уже пробовал так много разных методов, но все они, кажется, представляют какую-то проблему. То, что я пробовал до сих пор: создание таймера NS, использование отложенных вызовов методов (executeSelector: withObject: afterDelay).
Ниже приведен пример метода, который я использую для задержки, но проблема в том, что если пользователь введет, скажем, «aaaa», будет воспроизводиться только первый «a», потому что весь цикл будет завершен раньше, чем время Последовательность даже закончена, генерируя. Было бы лучше, если бы цикл мог дождаться завершения дела переключателя, прежде чем продолжить.
В любом случае, я подумал, что это должно быть реализовано, но, похоже, это не работает, так что, возможно, есть лучший способ реализовать генератор кода Морзе, или я просто пропускаю шаг, так что если кто-то может пожалуйста, помогите мне понять это, я был бы очень признателен.
- (NSString *)convertTextToMorse:(NSString *)phrase {
for (int i = 0; i < [phrase length]; i++) {
unichar ch;
ch = [phrase characterAtIndex:i];
NSLog(@"Processing charachter %c",ch);
//Dot = 100ms
//Dash = 300ms
//Pause = 200ms
switch (ch) {
case 'a':
//Morse "a"
[self playDotSound];
[self performSelector:@selector(playDashSound) withObject:nil afterDelay:0.2];
break;
case 'b':
//Morse "b"
break;
default:
break;
}
}
return phrase;
}