2017-06-17 57 views
0

我試圖爲一些孩子製作一個簡單的應用程序。我想顯示一張照片並將該照片鏈接到聲音。顯示圖像並將其鏈接到聲音

當孩子點擊「播放聲音」時,它應播放代表圖像的音頻。

到目前爲止我已經做了只顯示圖像,我已經把它放在Assets.xcassets,但我的問題是.. 如何將這些照片鏈接到一些音頻文件,並通過點擊「播放聲音」

這是我在ViewController.swift代碼:

@IBOutlet weak var viewImage: UIImageView! 
var images: [UIImage] = [ 
    UIImage(named: "photo1.png")!, 
    UIImage(named: "photo2.png")!, 
    UIImage(named: "photo3.png")!, 
    UIImage(named: "photo4.png")!, 
    UIImage(named: "photo5.png")!, 
    UIImage(named: "photo6.png")!, 
    UIImage(named: "photo7.png")!, 
    UIImage(named: "photo8.png")! 
] 
var currentImagesIndex = 0 

@IBAction func nextImage(_ sender: Any) { 
    currentImagesIndex += 1 
    let numberOfImages = images.count 
    let nextImagesIndex = currentImagesIndex % numberOfImages 

    viewImage.image = images[nextImagesIndex] 

} 

到目前爲止,當我點擊下一張圖就說明了我一個新的照片,它的工作確定。現在我想要做的就是將「photo1-8」鏈接到音頻並播放它。

我會感謝任何形式的幫助, 拉杜

+0

上的ImageView –

回答

0

你應該首先你的所有聲音文件添加到您的項目。我假設你知道如何做到這一點。添加文件後,您的項目導航應該看起來有點像這樣:

enter image description here

爲了方便,我會打電話給你8個聲音文件sound1.mp3sound2.mp3sound3.mp3 ... sound8.mp3

創建一個名爲soundFiles在類中的屬性:

let soundFiles: [String] = [ 
    "sound1", 
    "sound2", 
    "sound3", 
    "sound4", 
    "sound5", 
    "sound6", 
    "sound7", 
    "sound8" 
] 

另外創建一個名爲player屬性來播放聲音:

var player: AVAudioPlayer! 

在「播放聲音」按鈕@IBAction,得到聲音文件的文件路徑並初始化播放器:

let numberOfImages = images.count 
let nextImagesIndex = currentImagesIndex % numberOfImages 
let soundFilePath = Bundle.main.url(forResource: soundFiles[nextImagesIndex], withExtension: ".mp3")! 
player = try! AVAudioPlayer(contentsOf: soundFilePath) 

然後你就可以通過調用prepareToPlay()play()連續播放聲音:

player.prepareToPlay() 
player.play() 
+0

你好,謝謝你的幫助。當我嘗試運行該應用程序時,它顯示此錯誤:「使用未解析標識符'nextImageIndex'。我該如何解決它?對不起:) –

+0

@RaduRaducu哎呀!我的意思是'currentImageIndex'。您似乎也很少理解這些錯誤發生的原因。我建議你先了解更多有關Swift的內容。 – Sweeper

+0

我知道我有很多缺乏..但我正在努力學習:)。 Sorri打擾你。修復「currentImageIndex」問題後,現在我有另一個..我真的不知道如何解決它。在應用程序中單擊8次「下一步按鈕」後,它在控制檯中顯示以下消息:「致命錯誤:索引超出範圍」。我試着返回,但有0個結果:)...崩潰後,我再次運行應用程序..並在第一次單擊下一步按鈕...它崩潰併發送給我「viewImage.image = image [ nextImageIndex]「..謝謝 –

0
  1. 進口AV基金會通過加入這一行的頂部:import AVFoundation
  2. MP3,WAV文件中的主項目目錄
  3. 檢查「如果需要,複製項目」&應用程序名稱在「添加到目標
  4. 使用此代碼播放測試與雨燕3.1聲音

    func playSound() { 
    
    var btnSound: AVAudioPlayer! 
    
    if let audioFileURL = Bundle.main.url(forResource: "fileName", withExtension: ".wav") { 
        do{ 
         try btnSound = AVAudioPlayer(contentsOf: audioFileURL) 
         btnSound.prepareToPlay() 
         btnSound.play() 
        } catch let err as NSError { 
         print(err.debugDescription) 
        } 
    } 
    
    } 
    
    //call playSound function inside nextImage method 
    

的Xcode 8.3.2

+0

感謝您的快速反應添加UITapGestureRecognizer。我試過了你的代碼,但是我得到一個錯誤「使用未解析的標識符'btn聲音' –

+0

我已經更新了答案,它現在應該可以工作了:) –