В методе forEach
я получил массив видов (один вид - карточка с изображением животного). И это вид колоды карт, и при проведении влево или вправо следующая карта появляется. Поэтому я хотел бы воспроизвести звук в UITapgestureRecognize
, который соответствует просмотру.
Животноводство:
class AnimalsStock {
var list = [Animal]()
init() {
let item = Animal(name: "Bear", soundUrl: "Bear", imageName: "Bear")
list.append(item)
list.append(Animal(name: "Cat", soundUrl: "Cat", imageName: "Cat"))
list.append(Animal(name: "Chicken", soundUrl: "Chicken", imageName: "Chicken"))
list.append(Animal(name: "Cow", soundUrl: "Cow", imageName: "Cow"))
}
}
Контроллер основного вида
HomeController: UIViewController {
func setupCards() {
allAnimals.list.forEach { (animal) in
let cardView = CardView(frame: .zero)
cardView.imageView.image = UIImage(named: animal.imageName)
cardView.animalLabel.text = animal.name
cardDeckView.addSubview(cardView)
cardView.fillSuperview()
}
}
}
и файл с UITapgestureRecognizer
class CardView: UIView {
@objc fileprivate func tapCard(recognizer: UITapGestureRecognizer) {
// Here, I would like to implement a method that plays a sound that matches to the image
pulseCard()
}
}
Метод воспроизведения звука:
var player : AVAudioPlayer?
func playSound(soundUrl: String) {
guard let url = Bundle.main.url(forResource: soundUrl, withExtension: "mp3") else { return }
do
{
try AVAudioSession.sharedInstance().setCategory(AVAudioSession.Category.playback)
try AVAudioSession.sharedInstance().setActive(true)
player = try AVAudioPlayer(contentsOf: url)
guard let player = player else { return }
player.play()
} catch let error {
print(error.localizedDescription)
}
}
func stopSound() {
if player != nil {
player?.stop()
}
}
Заранее спасибо