显示图像并将其链接到声音
Posted
技术标签:
【中文标题】显示图像并将其链接到声音【英文标题】:show an image and link it to a sound 【发布时间】:2017-06-17 10:22:33 【问题描述】:我正在尝试为一些孩子制作一个简单的应用程序。我想展示一张照片并将该照片链接到声音。
当孩子点击“播放声音”时,它应该播放代表图像的音频。
到目前为止,我只展示了已放入 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”链接到音频并播放它。
我将不胜感激任何形式的帮助, 拉度
【问题讨论】:
在 imageview 上添加 UITapGestureRecognizer 【参考方案1】:您应该首先将所有声音文件添加到您的项目中。我假设你知道如何做到这一点。添加文件后,您的项目导航器应如下所示:
为方便起见,我将你的8个声音文件称为sound1.mp3
、sound2.mp3
、sound3.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()
【讨论】:
您好,感谢您帮助我。我有一个小错误..当我尝试运行该应用程序时,它显示此错误:“使用未解析的标识符'nextImageIndex'。我该如何解决它?抱歉:) @RaduRaducu 哎呀!我的意思是currentImageIndex
。您似乎还没有很好地理解为什么会发生这些错误。我建议你先了解更多关于 swift 的知识。
我知道我有很多不足......但我正在努力学习:)。对不起打扰你了。在修复了“currentImageIndex”问题之后,现在我有了另一个问题……我真的不知道如何解决它。在应用程序中单击 8 次“下一步按钮”后,它会在控制台中崩溃并显示以下消息:“致命错误:索引超出范围”。我尝试返回但结果为 0 :)...崩溃后,我再次运行应用程序..第一次单击下一步按钮...它崩溃并将我发送到“viewImage.image = image [ nextImageIndex]".. 谢谢
@RaduRaducu 好的,我没有仔细阅读您的代码。 currentImageIndex
会越界。请参阅使用nextImageIndex
的已编辑答案。【参考方案2】:
-
通过在顶部添加此行来导入 AV Foundation:
import AVFoundation
将MP3、WAV文件拖入项目主目录
在“添加到目标”中选中“Copy items if needed”和应用名称
使用此代码播放声音
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
中使用 Swift 3.1 测试【讨论】:
感谢您的快速回复。我试过你的代码,但我收到一个错误“使用未解析的标识符'btn Sound'。以上是关于显示图像并将其链接到声音的主要内容,如果未能解决你的问题,请参考以下文章
在 ImageView 中显示图像并将其保存到 Android 上的内部存储中
如何单击图像按钮并将其显示在 Android Studio 的新页面中?
如何裁剪 UIScrollView 中显示的 UIImageView 部分并将其保存到 UIImage 变量?