iPhone: come rendere il suono del clic del tasto per la tastiera personalizzata?

StackOverflow https://stackoverflow.com/questions/818515

  •  03-07-2019
  •  | 
  •  

Domanda

Esiste un modo per richiamare a livello di programmazione la tastiera " fare clic " suono? La mia app ha una tastiera personalizzata (costruita con UIButtons) e vorrei fornire un feedback audio quando l'utente tocca i tasti. Ho provato a creare i miei suoni in Garageband, ma non ero contento di nessuna delle mie creazioni. Se non esiste un modo standard per invocare il clic del tasto, qualcuno può indicarmi una libreria di suoni che potrebbe avere un tale gioiello?

È stato utile?

Soluzione

Il modo più semplice che ho trovato è estrarre Tock.aiff (il suono della tastiera) dal simulatore di iPhone e impacchettarlo con la tua app, quindi riprodurlo utilizzando AudioServicesPlaySystemSound () al momento opportuno . Sulla mia macchina, semplicemente digitando Tock.aiff in Spotlight si attiva il file, ma se devi cercarlo, è nella versione simulatore di UIKit.framework.

Altri suggerimenti

Esiste una soluzione molto veloce per riprodurre il suono predefinito della tastiera:

  1. Aggiungi AudioToolbox.framework
  2. Aggiungi la seguente riga ovunque tu voglia riprodurre il suono:

    AudioServicesPlaySystemSound (0x450);

A partire da iOS 4.2, adotta il protocollo UIInputViewAudioFeedback su una sottoclasse personalizzata di UIView. Imposta questa vista come " inputView " quindi chiama " playInputClick " al momento opportuno.

http://developer.apple.com/library/ ios / # documentazione / UIKit / riferimento / UIInputViewAudioFeedback_ProtocolReference / Reference / Reference.html

Solo per risparmiare tempo ad alcune persone. Metti questo nella tua vista personalizzata:

- (BOOL) enableInputClicksWhenVisible {
    return YES;
}

Per fare questo clic:

[[UIDevice currentDevice] playInputClick];

Non è necessario copiare il file nella tua app: dovresti essere in grado di ottenerlo direttamente dal framework UIKit:

CFURLRef soundFileURLRef = CFBundleCopyResourceURL(
    CFBundleGetBundleWithIdentifier(CFSTR("com.apple.UIKit")),
    CFSTR ("Tock"),CFSTR ("aiff"),NULL);

Questo è quello che ne ho ricavato dal commento di aSquared:

NSString *path = [[NSBundle bundleWithIdentifier:@"com.apple.UIKit"] pathForResource:@"Tock" ofType:@"aiff"];
SystemSoundID soundID;
AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath:path], &soundID);
AudioServicesPlaySystemSound(soundID);
AudioServicesDisposeSystemSoundID(soundID);

L'uso di 0x450 come SystemSoundID funziona per me (e al volume corretto - solo suonare Tock.aiff incorporato era troppo rumoroso). Non ho idea di quanto sia portatile: questo è su un iPod Touch di terza generazione.

Non rispetta ancora la preferenza per l'attivazione / disattivazione del segno di spunta.

Ecco cosa ho fatto:

Individua 'Tock.aiff' in: /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.2.sdk/System/Library/Frameworks/UIKit.framework

Trascinalo nella cartella Risorse in xCode, selezionando "Copia elementi nella cartella del gruppo di destinazione"

Importa AVFoundation.framework nella cartella Frameworks in xCode

Importa AVFoundation ai vertici della tua classe:

#import <AVFoundation/AVAudioPlayer.h>

Utilizza la seguente funzione:

- (void)PlayClick {
    NSURL* musicFile = [NSURL fileURLWithPath:[[NSBundle mainBundle] 
                                               pathForResource:@"Tock"
                                               ofType:@"aiff"]];
    AVAudioPlayer *click = [[AVAudioPlayer alloc] initWithContentsOfURL:musicFile error:nil];
    [click setVolume:0.15f];
    [click play];
}

Questo è tutto!

Da quello che posso dire, il suono del clic non è disponibile per le app. Non ho visto nulla di rilevante nei servizi di sessione audio. AudioServicesPlaySystemSound () sembra promettente, ma non sembra esserci alcun ID audio di sistema per il suono del clic (uno sguardo più da vicino alle intestazioni può far apparire qualcosa). Puoi sempre ripetere una chiamata a AudioServicesPlaySystemSound (i) e vedere se viene riprodotto qualcosa. Le immagini di ripristino del software iPhone probabilmente hanno il suono, ma probabilmente non sono autorizzate per l'uso generale. Non è necessario menzionare il jailbreak di un iPhone per ottenere il gustoso suono del clic.

Per i suoni (creative commons), controlla il Progetto Freesound .

Per il futuro, forse richiedere che Apple esponga suoni di sistema diversi dal suono di avviso da utilizzare con AudioServicesPlaySystemSound () .

Forse un po 'in ritardo ... Ma nell'ultimo post di MrMage, se si esegue AudioServicesDisposeSystemSoundID (soundID); subito dopo AudioServicesPlaySystemSound (soundID); quindi non sentirai nulla mentre scarti l'audio del sistema subito dopo averlo creato.

Devi prima terminare la riproduzione. Chiama solo AudioServicesDisposeSystemSoundID per annullare il suono prima che finisca

Non è necessario disporre immediatamente dell'oggetto audio. Mantieni un puntatore sull'oggetto audio in una proprietà e eliminalo solo quando stai per riprodurre un altro suono prima di ricrearlo.

E, infine, smaltire finalmente l'oggetto SystemSoundID in dealloc.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top