質問編集履歴

2 変更

takor

takor score 3

2017/02/17 19:38  投稿

制御文のaudioPlayerdidFinishPlayingが呼ばれない
制御文が呼ばれない
MainStoryBoard上にタップするとオーディオを再生し、再生中のbackground colorが変更されるUIButtonを2つ設置しています。yourButton、yourButton2になります。
MainStoryBoard上に新たにyourButton、yourButton2のオーディオを順番に再生するyourButton3を設置したのですが、以下のコードで試してみると
else if文の三番目のaudioPlayerdidFinishPlaying(_:successfully:)が呼ばれません。どのように変更すれば良いか、ご存知の方いらっしゃればご教授お願いします。
else if文の三番目のaudioPlayerdidFinishPlayingが呼ばれません。
```
  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!
  @IBOutlet weak var yourButton3: customButton!
  fileprivate var player1:AVAudioPlayer?
  fileprivate var player2:AVAudioPlayer?
  fileprivate var player3:AVAudioPlayer?
 @IBAction func pushButton1(sender: UIButton) {
      Player(url: url1)
  }
 @IBAction func pushButton2(sender: UIButton) {
   Player1(url: url2)
  }
 @IBAction func pushButton3(_ sender: UIButton) {
   Player(url: url2)
   player1!.play()
  }
 func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) {
   if (player === player1) {
       yourButton.isSelected = false
   } else if (player === player2) {
       yourButton2.isSelected = false
   } else if (player === player3) {
       yourButton.isSelected = false
       player2!.play()
       yourButton2.isSelected = false
   }
}
 func Player(url: URL) {
   do {
       try player1 = AVAudioPlayer(contentsOf:url)
       player1!.play()
       yourButton.isSelected = true
       player1!.delegate = self
   } catch {
       print(error)
   }
}
 func Player1(url: URL) {
   do {
       try player2 = AVAudioPlayer(contentsOf:url)
       player2!.play()
       yourButton2.isSelected = true
       player2!.delegate = self
   } catch {
       print(error)
   }
}
 func Player3(url: URL, url2: URL) {
   do {
       try player1 = AVAudioPlayer(contentsOf:url)
       try player2 = AVAudioPlayer(contentsOf: url2)
       player1!.play()
       yourButton.isSelected = true
       player1!.delegate = self
   } catch {
       print(error)
   }
}
```  
以下の文で解決しました!  
```func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) {  
   if (player === player1) {  
       yourButton.isSelected = false  
   } else if (player === player2) {  
       yourButton2.isSelected = false  
   }  
}  
コード  
```
  • iOS

    4679 questions

    iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

  • Xcode

    4911 questions

    Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

  • Swift

    8728 questions

    Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

1 変更

takor

takor score 3

2017/02/14 17:43  投稿

制御文のaudioPlayerdidFinishPlayingが呼ばれない
Player3がnilとなるため、else if文の三番目のaudioPlayerdidFinishPlaying(_:successfully:)が呼ばれません。どのように変更すれば良いか、ご存知の方いらっしゃればご教授お願いします。
MainStoryBoard上にタップするとオーディオを再生し、再生中のbackground colorが変更されるUIButtonを2つ設置しています。yourButton、yourButton2になります。
MainStoryBoard上に新たにyourButton、yourButton2のオーディオを順番に再生するyourButton3を設置したのですが、以下のコードで試してみると
else if文の三番目のaudioPlayerdidFinishPlaying(_:successfully:)が呼ばれません。どのように変更すれば良いか、ご存知の方いらっしゃればご教授お願いします。
```
  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!
  @IBOutlet weak var yourButton3: customButton!
  fileprivate var player1:AVAudioPlayer?
  fileprivate var player2:AVAudioPlayer?
  fileprivate var player3:AVAudioPlayer?
 @IBAction func pushButton1(sender: UIButton) {
      Player(url: url1)
  }
 @IBAction func pushButton2(sender: UIButton) {
   Player1(url: url2)
  }
 @IBAction func pushButton3(_ sender: UIButton) {
   Player(url: url2)
   player1!.play()
  }
 func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) {
   if (player === player1) {
       yourButton.isSelected = false
   } else if (player === player2) {
       yourButton2.isSelected = false
   } else if (player === player3) {
       yourButton.isSelected = false
       player2!.play()
       yourButton2.isSelected = false
   }
}
 func Player(url: URL) {
   do {
       try player1 = AVAudioPlayer(contentsOf:url)
       player1!.play()
       yourButton.isSelected = true
       player1!.delegate = self
   } catch {
       print(error)
   }
}
 func Player1(url: URL) {
   do {
       try player2 = AVAudioPlayer(contentsOf:url)
       player2!.play()
       yourButton2.isSelected = true
       player2!.delegate = self
   } catch {
       print(error)
   }
}
 func Player3(url: URL, url2: URL) {
   do {
       try player1 = AVAudioPlayer(contentsOf:url)
       try player2 = AVAudioPlayer(contentsOf: url2)
       player1!.play()
       yourButton.isSelected = true
       player1!.delegate = self
   } catch {
       print(error)
   }
}
```
  • iOS

    4679 questions

    iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

  • Xcode

    4911 questions

    Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

  • Swift

    8728 questions

    Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る