2012-05-18 3 views
-2

У меня есть UIButton in a nib (xib), который id хотел бы воспроизвести звук при касании, какой протокол нужно соблюдать, чтобы это произошло?UIButton - Как заставить его играть звук

** переработанный вопрос ** В течение моего времени здесь, в переполнении стека, я многому научился, а не только о том, что мне обычно требуется с помощью (Objective-C, xCode), но с тем, как переполнение стека работает. Я нахожу, что это огромное количество информации и поддержки, и я посмотрел, как я задавал этот вопрос раньше, и это совершенно не имело никакого смысла. Чтобы помочь будущим пользователям, я отредактировал то, что я изначально просил, таким образом, что другие могут понять, как это сделал Навен. Извинения

+0

Я думаю, что было бы КРАЙНЕ легко просто загрузить звуковой файл для Интернета или какого-либо другого сайта. – Sirens

+0

ОК в ретроспективе, поскольку ive узнал намного больше, так как, когда я спросил, что этот вопрос был действительно новым для iOS, но голоса вниз .. действительно? я уверена, что кто-то споткнется через этот день, Навин привел меня туда, и его ответ был прав! – theProject

ответ

3

Добавить эту структуру

AudioToolBox framework 

Включить этот заголовочный файл .h файл

#include <AudioToolbox/AudioToolbox.h> 
CFURLRef  soundFileURLRef; 
SystemSoundID soundFileObject; 

Добавьте этот код в viewdidLoad

NSURL *tapSound = [[NSBundle mainBundle] URLForResource: @"Voice035" 
              withExtension: @"amr"]; 

    // Store the URL as a CFURLRef instance 
self.soundFileURLRef = (CFURLRef) [tapSound retain]; 

    // Create a system sound object representing the sound file. 
AudioServicesCreateSystemSoundID (
            soundFileURLRef, 
            &soundFileObject 
           ); 

На кнопки Tap, вызовите этот метод

AudioServicesPlayAlertSound (soundFileObject); 

выпустите в dealloc

AudioServicesDisposeSystemSoundID (soundFileObject); 
CFRelease (soundFileURLRef); 

Для получения дополнительной информации: http://developer.apple.com/library/ios/#documentation/AudioToolbox/Reference/SystemSoundServicesReference/Reference/reference.html#//apple_ref/c/func/AudioServicesCreateSystemSoundID

+1

Naveen, мне так жаль, что я не принял этот ответ ДЛИННЫМ ВРЕМЯ назад, это как я начал реализовывать его для того, что мне тоже нужно, я просто ненадолго был на SO, но твердо верю, что рев имеет важное значение. снова спасибо – theProject

+0

thnks brother !! –

2

Я бы сказал, создайте класс «Наблюдатель», который воспроизводит звук, к которому подключены все кнопки. Я приведу пример ниже, это одноэлементный класс. Это написано по прихоти и не проверено, но дает вам представление.

//SoundObserver.h

#include <AVFoundation/AVFoundation.h> 

@interface SoundObserver { 

    AVAudioPlayer *audioPlayer; 
} 
-(void)playSound; 
+(SoundObserver*)sharedInstance; 

@property (nonatomic, retain) AVAudioPlayer *audioPlayer; 

@end 


//SoundObserver.m 

static SoundObserver *instance = nil; 

@implementation SoundObserver 


-(id)init { 

    self = [super init]; 

    if(self) { 

    //Get path to file. 
    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"sound" 
                 ofType:@"wav"]; 

    // filePath to URL 
    NSURL *fileURL = [[NSURL alloc] initFileURLWithPath:filePath]; 

    //Initialize the AVAudioPlayer. 
    self.audioPlayer = [[AVAudioPlayer alloc] 
          initWithContentsOfURL:fileURL error:nil]; 

    // Preloads buffer and prepare for use. 
    [self.audioPlayer prepareToPlay]; 

    [filePath release]; 
    [fileURL release]; 

    } 

} 

+(SoundObserver*)sharedInstance { 

     @synchronized(self) { 

     if (instance == nil) 

      instance = [[self alloc] init]; 
    } 

    return instance; 
} 


-(void)playSound { 

    //make sure the audio resets to beginning each activation. 

    [self.audioPlayer play]; 
} 

-(void)dealloc { 

    //Clean up 
    [self.audioPlayer release]; 
    self.audioPlayer = nil; 
    [super dealloc]; 
} 



// User example. 

In applicationDidFinishLaunching: 

    [SoundObserver sharedInstance]; 

From here you can connect all buttons to the same function, or call it from anywhere in the App that #import's SoundObserver.h 

-(IBOutlet)buttonClick:(id)sender { 

    [[SoundObserver sharedInstance] playSound]; 
} 
+0

спасибо, я только что видел, как плохо я задал этот вопрос, так как я использовал свой iPhone и приложение с 6 по 8, что-то беспорядок, но похоже, что у тебя есть то, что я получаю, я собираюсь попробовать это метод и больной вы знаете! – theProject

Смежные вопросы