- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 MainStoryBoard 上创建了带有图像的 UIButton。当我按下该按钮时,它会播放一个音频文件,并且在播放音频时 UIButton 的背景颜色会发生变化。
audioPlayerDidFinishPlaying1 被正确调用,但是 audioPlayerDidFinishPlaying2似乎没有被调用。我很感激任何帮助我解决这个问题的建议。
let url1 = Bundle.main.bundleURL.appendingPathComponent("music1.mp3")
let url2 = Bundle.main.bundleURL.appendingPathComponent("music2.mp3")
@IBOutlet weak var yourButton: CustomButton!
@IBOutlet weak var yourButton2: CustomButton!
func Player(url: URL) {
do {
try player = AVAudioPlayer(contentsOf:url)
player.play()
yourButton.isSelected = true
player.delegate = self
} catch {
print(error)
}
}
func Player1(url: URL) {
do {
try player = AVAudioPlayer(contentsOf:url)
player.play()
yourButton2.isSelected = true
player.delegate = self
} catch {
print(error)
}
}
@IBAction func pushButton1(sender: UIButton) {
Player(url: url1)
}
func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) {
yourButton.isSelected = false
}
@IBAction func pushButton2(sender: UIButton) {
Player1(url: url2)
}
func audioPlayerDidFinishPlaying2(_ player: AVAudioPlayer, successfully flag: Bool) {
yourButton2.isSelected = false
}
最佳答案
您正在使用 Player1/Player
方法在本地创建播放器。所以当方法结束时,播放器将被释放。将生成的播放器保留为类成员,这样它就不会在方法退出时被释放
在你的类中添加:
class YourClass
{
let url1 = Bundle.main.bundleURL.appendingPathComponent("music1.mp3")
let url2 = Bundle.main.bundleURL.appendingPathComponent("music2.mp3")
@IBOutlet weak var yourButton: CustomButton!
@IBOutlet weak var yourButton2: CustomButton!
fileprivate var player1: AVAudioPlayer?
fileprivate var player2: AVAudioPlayer?
.
.
.
func Player(url: URL) {
do {
try player1 = AVAudioPlayer(contentsOf:url)
player1!.play()
yourButton.isSelected = true
player1!.delegate = self
} catch {
print(error)
}
}
另一件事.. 您正在使用委托(delegate)方法 audioPlayerDidFinishPlaying
,它是 AVAudioPlayer
的委托(delegate)方法。但是 audioPlayerDidFinishPlaying2
不是,所以在这里没用。由于您有两名玩家,一个类(class)作为代表,您需要确定哪个玩家已完成并更改正确的按钮。
func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) {
if (player === player1) {
yourButton.isSelected = false
} else if (player === player2) {
yourButton2.isSelected = false
}
}
关于ios - 如何多次使用 audioPlayerDidFinishPlaying,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42185549/
我有一个类,我调用它来利用 AVAudioPlayer ,并且在播放音频时一切正常,但是当 -audioPlayerDidFinishPlaying: 被称为我的NSLog() 命令表示玩家被释放;问
我正在使用AVAudioPlayer类播放音频,但是问题是,当我播放音频时,即使文件播放完并且即使将循环数设置为1,也无法在audioPlayerDidFinishPlaying中收到回调。 这是代码
这个问题已经有答案了: AVAudioPlayer.play() does not play sound (1 个回答) 已关闭 3 年前。 遇到问题 audioPlayerDidFinishPlay
class ViewController: UIViewController, AVAudioPlayerDelegate { func audioPlayerDidFinishPlaying
Player1 运行良好,但我在执行 Player2 时出错。 我应该如何更改 audioPlayerDidFinishPlaying 以使其工作? 这是我的 ViewController.swift
我在 MainStoryBoard 上创建了带有图像的 UIButton。当我按下该按钮时,它会播放一个音频文件,并且在播放音频时 UIButton 的背景颜色会发生变化。 audioPlayerDi
我在使用 AVAudioPlayer 时遇到问题。我想在我的声音文件完成后做点什么。正在播放声音,但未调用 audioPlayerDidFinishPlaying。 我的.h #import "Vie
我创建了一个自定义类来处理音频播放。 音频播放.h #import #import "AVFoundation/AVAudioPlayer.h" #import @interface AudioP
当我按下“yourButton”或“yourButton2”或“yourButton3”时,每个按钮都会播放一个音频文件,并且在播放音频时,UIButton 被设置为选中状态。 我希望“yourBut
我在 MainStoryBoard 上创建了三个 UIButton。 当我按下“yourButton3”时,不会调用 player3。 我发现更改 else if 子句或将某些内容分配给 player
我正在使用 AVFoundation 框架快速编写一个简单的播放器。一切似乎都正常,除了我的播放器一直在一遍又一遍地播放同一首歌曲。我的播放列表中只有一首歌,所以这是有道理的。我想要做的是检查 aud
我遇到了 AVAudioPlayer 类的奇怪问题,audioPlayerDidFinishPlaying:successfully: 回调有时 未被调用。开始播放的代码的精简版本看起来像, self
我是一名优秀的程序员,十分优秀!