2017-06-17 60 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

我已经更新了答案,它现在应该可以工作了:) –