Код: Выделить всё
let patternPlayer = try hapticEngine.makeAdvancedPlayer(with: patternFile)
patternPlayer.loopEnabled = false
try patternPlayer.start(atTime: CHHapticTimeImmediate)
Я узнал о PatternPlayer.pause и PatternPlayer.resume. Я начал им звонить после получения UIApplication.willResignActiveNotification и UIApplication.didBecomeActiveNotification. Однако по какой-то причине ни звук, ни тактильные ощущения не возвращаются, даже после того, как я перезапустил CHHapticEngine с помощью start. Я еще вызывал AVAudioSession.setActive, но и это не помогло...
Код: Выделить всё
class ViewController: UIViewController {
var engine: CHHapticEngine!
var player: CHHapticAdvancedPatternPlayer!
var engineStopped: Bool = true
override func viewDidLoad() {
super.viewDidLoad()
let engine = try! CHHapticEngine(audioSession: .sharedInstance())
self.engine = engine
engine.stoppedHandler = { [unowned self] reason in
self.engineStopped = true
print("Engine stopped reason", reason)
}
let player = try! engine.makeAdvancedPlayer(
with: try! CHHapticPattern(
contentsOf: Bundle.main.url(
forResource: "res",
withExtension: "ahap"
)!
)
)
player.loopEnabled = true
player.completionHandler = { err in
print("Audio end", err)
}
try! engine.start()
try! player.start(atTime: CHHapticTimeImmediate)
self.player = player
NotificationCenter.default.addObserver(
self,
selector: #selector(appWillResignActive),
name: UIApplication.willResignActiveNotification,
object: nil
)
NotificationCenter.default.addObserver(
self,
selector: #selector(appDidBecomeActive),
name: UIApplication.didBecomeActiveNotification,
object: nil
)
}
@objc
private func appWillResignActive() {
try! player.pause(atTime: CHHapticTimeImmediate)
}
@objc
private func appDidBecomeActive() {
if engineStopped {
try! engine.start()
engineStopped = false
}
try! player.resume(atTime: CHHapticTimeImmediate)
}
}
- на паузе останавливаю оригинальный тактильный плеер, запоминая, для как долго он воспроизводился
- при возобновлении я создаю новый тактильный проигрыватель со смещением, используя поиск, чтобы он воспроизводился с того места, где его предшественник был прерван
- Я запускаю этот плеер
Как перезапустить звук в этом сценарии? Я не вижу никакой прямой ссылки на AVAudioPlayer, AVAudioEngine или что-то в этом роде где-либо в отладчике памяти...
Подробнее здесь: https://stackoverflow.com/questions/787 ... with-audio
Мобильная версия