This is how I implemented it. It works like a charm!
//Airplay constants private var observerContextAirplay = 1 private var propertyToObserveAirplay = "externalPlaybackActive" // MARK: AirPlay Key-value Observing func startObservingForAirPlayStatusChanges() { self.player.moviePlayer.addObserver(self, forKeyPath: propertyToObserveAirplay, options: .New, context: &observerContextAirplay) } func stopObservingForAirPlayStatusChanges() { self.player.moviePlayer.removeObserver(self, forKeyPath: propertyToObserveAirplay) } override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) { if context == &observerContextAirplay { if self.player.moviePlayer.externalPlaybackActive == true { self.setUpAirPlayView() } else if self.player.moviePlayer.externalPlaybackActive == false { self.resetPlayerView() } } else { super.observeValueForKeyPath(keyPath, ofObject: object, change: change, context: context) } }
// Set up AirplayView
func setUpAirPlayView() { //Airplay Button if self.airPlay_PlayBtn == nil { let playImage = UIImage(named: "player_play.png")! if let _ = self.airPlay_PlayBtnFrame { self.airPlay_PlayBtn = UIButton(frame: self.airPlay_PlayBtnFrame) self.airPlay_PlayBtn.setBackgroundImage(playImage, forState: UIControlState.Normal) self.airPlay_PlayBtn.addTarget(self, action:
source share