Main.StoryboardでカスタムLaunchScreenを作成して、サウンドが実際にLaunchScreenから来ているように見せます。サウンドはうまく機能し、次のビューコントローラーへのセグも同様に機能します。唯一の問題は、音の再生が停止する前にセグが発生することです。私は、セグを作る前に音が完了したいと思います。論理的には、performSegueは.play()の直後にあるため、動作するはずです。しかし、それは同時に起こると思われる。ここに私のコードです:サウンドの再生が停止した後にどのようにセグを実行するのですか?
"showNavController" は単にセグエあるperform(Selector(("showNavController")), with: self, afterDelay: 3)
:
func showNavController() {
performSegue(withIdentifier: "myLaunchSegue", sender: nil)
}
が、エラーでプログラムがクラッシュ「キャッチされない例外を
super.viewDidLoad()
//PLAY SOUND CLIP//
let musicFile = Bundle.main.path(forResource: "fanfare", ofType: ".mp3")
do {
try musicSound = AVAudioPlayer(contentsOf: URL (fileURLWithPath: musicFile!))
} catch { print("ERROR PLAYING MUSIC")}
musicSound.play() //WORKS
//
DispatchQueue.main.async() {
self.performSegue(withIdentifier: "myLaunchSegue", sender: self) //WORKS
}
私が追加しようとしています.... ....インスタンスに送信された認識できないセレクタ "
私はまた、prを保持するためにブール値を追加しようとしました音が演奏されるまで進行中であるが、動作させることはなかった。何か案は?
///////////////////////////// 更新: ラッセルズにお答えしますが、いくつか質問があります。デリゲートとしてAVAudioPlayerを設定し、その平均値は次のように次のクラスにそれを設定します:
class MyLaunchViewController: UIViewController, AVAudioPlayer { ...
また、どのように私は、関数audioPlayerDidFinishPlayingを呼ぶのですか?同様に:
audioPlayerDidFinishPlaying(musicSound, successfully: true)
私はコードブロック全体を投稿します。 UIViewController、AVAudioPlayer { するvar musicSound::SOUND
FOR AVAudioPlayer = AVAudioPlayer()//override func viewDidLoad() {
super.viewDidLoad()
//PLAY SOUND CLIP//
let musicFile = Bundle.main.path(forResource: "fanfare", ofType: ".mp3")
do {
try musicSound = AVAudioPlayer(contentsOf: URL (fileURLWithPath: musicFile!))
} catch { print("ERROR PLAYING MUSIC")}
musicSound.play() //WORKS
//
audioPlayerDidFinishPlaying(musicSound, successfully: true)
}
optional func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) {
DispatchQueue.main.async() {
self.performSegue(withIdentifier: "myLaunchSegue", sender: self)
}
}
...
import UIKit
輸入AVFoundation // SOUND FOR
クラスMyLaunchViewControllerそれが簡単に理解することができます
クラスにAVAudioPlayerを書き込むときにエラーが発生します(おそらく、私は何をするべきか誤解しましたか?)。私は複数の継承を持っていると言います。また、私はオプションとして新しい関数を設定することを望んでいません。プロトコルメンバーのためだけです。私は、エラーを訂正し、プログラムを実行すると、サウンドの再生が終了する前に最後に、次のセグエが実行されます... :(悲しいパンダ。
あなたのLaunchScreenAVAudioPlayerDelegate
を行い、その後、
audioPlayerDidFinishPlaying
コールバックを使用する必要が
の詳細を取得することができ、第1のコントローラでは、あなたが必要とするすべて
あなたの答えをありがとう!しかしそれを正しく実装する方法まだ分からない。いくつかの質問を持っているのです。私のオリジナルの下部を参照してください。投稿: –
Joamkim-ハードコード化された時間遅延を避ける必要があります。彼らはせいぜい推測であり、少しばかげている。私はあなたに作業バージョンを示すことができます - しかし、その日の終わりまでではないので、他の誰かが私にそれを打つかもしれません! – Russell
Joakim - 私はあなたに実例を与えるために上記の私の答えを更新しました – Russell