【问题标题】:How to disable user Interaction during AVAudioSession如何在 AVAudioSession 期间禁用用户交互
【发布时间】:2018-03-12 01:01:11
【问题描述】:

我目前正在研究一种在调用时将播放 mp4 文件的方法。但是,在播放 mp4 文件时,我希望禁用用户交互。这样用户就不能在播放 mp4 时点击屏幕并重新启动相同的 AVAudioSession。到目前为止,我的代码是这样的

import Foundation; import UIKit; import AVFoundation

var player: AVAudioPlayer?

class Card: NSObject
{
var image: UIImage
var soundUrl: String


init(image: UIImage, soundUrl: String, isActive:Bool = true) {
    self.image = image
    self.soundUrl = soundUrl
}
func playSound()
{
    guard let url = Bundle.main.url(forResource: self.soundUrl, withExtension: "m4a") else { return }
    do
    {
        try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
        try AVAudioSession.sharedInstance().setActive(true)

        player = try AVAudioPlayer(contentsOf: url)
        guard let player = player else { return }
        player.prepareToPlay()

        player.play()

        print("play")
    } catch let error {
        print(error.localizedDescription)
    }
}
}

【问题讨论】:

  • 禁用某些元素或禁用设备上的所有传入触摸?
  • 禁用设备上的所有传入触摸

标签: ios swift xcode avaudioplayer avaudiosession


【解决方案1】:

您缺少对要禁用的 UI 元素的任何引用。您只需在它们上设置button.isEnabled = false,并在播放器完成后将它们设置回来。通过将您的对象设置为delegate,然后实现func audioPlayerDidFinishPlaying(_:successfully) 以重新开启,您将知道播放器已完成。

请注意,没有理由在调用play() 之前立即调用prepareToPlay()play() 自行准备。


player.delegate = self

extension Card: AVAudioPlayerDelegate  {
    func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool)
        // re-enable UI
    }
}

【讨论】:

  • '你会知道玩家通过将你的对象设置为它的委托来完成'我该怎么做呢?
【解决方案2】:

您可以在播放音频后拨打self.view.isUserInteractionEnabled = false

之后,在audioPlayerDidFinishPlaying(_:successfully)上使用self.view.isUserInteractionEnabled = true

【讨论】:

    【解决方案3】:

    要禁用设备上的所有传入触摸,您可以调用 UIApplication.shared.beginIgnoringInteractionEvents() 并调用 UIApplication.shared.endIgnoringInteractionEvents() 以重新启用触摸。这通常在动画期间调用,但这是您要求的。

    【讨论】:

      猜你喜欢
      • 2012-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多