MPMoviePlayerController потребителски контрол (подизглед)

Искам да създам персонализиран контролер за MPMoviePlayerController. Всичко работи добре с бутона, но когато завъртя устройството, подизгледът (видео контролер) не актуализира оформлението, за да пасне на екрана.

override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.

    moviePlayer = MPMoviePlayerController(contentURL: urlVideo)
    moviePlayer.movieSourceType = MPMovieSourceType.Unknown
    moviePlayer.view.frame = self.view.bounds
    moviePlayer.scalingMode = MPMovieScalingMode.None
    moviePlayer.controlStyle = MPMovieControlStyle.None
    moviePlayer.shouldAutoplay = true
    moviePlayer.view.backgroundColor = UIColor.blackColor()
    self.view.addSubview(moviePlayer.view)
    moviePlayer.prepareToPlay()
    moviePlayer.play()

    var tapGestureRecognizer: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "handleTapGestureRecognizer")
    tapGestureRecognizer.delegate = self
    self.view.addGestureRecognizer(tapGestureRecognizer)

    // Do any additional setup after loading the view.
    self.modalTransitionStyle = UIModalTransitionStyle.CrossDissolve;

    //       NSNotificationCenter.defaultCenter().addObserver(self, selector: "rotated", name: UIDeviceOrientationDidChangeNotification, object: nil)

    NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: "updatePlaybackTime:", userInfo: nil, repeats: true)

    NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("playerPlaybackDidFinish:"),
        name: MPMoviePlayerPlaybackDidFinishNotification, object: nil)

    NSNotificationCenter.defaultCenter() .addObserver(self, selector: "movieOrientationChanged", name: UIDeviceOrientationDidChangeNotification, object: nil)

    self.showController()
}

func showController() {
    doneButton = UIButton(frame: CGRectMake(0, 22, 50, 30))
    doneButton.backgroundColor = UIColor.redColor()
    doneButton.tintColor = UIColor.blackColor()
    doneButton.setTitle("Done", forState: .Normal)
    doneButton.addTarget(self, action: "exitVideo:", forControlEvents: UIControlEvents.TouchUpInside)
    self.controllerView.addSubview(doneButton)

    playButton = UIButton(frame: CGRectMake(0, self.view.bounds.size.height - 30, 60, 30))
    playButton.backgroundColor = UIColor.redColor()
    playButton.tintColor = UIColor.blackColor()
    playButton.addTarget(self, action: "pauseVideo:", forControlEvents: UIControlEvents.TouchUpInside)

    self.controllerView.addSubview(playButton)
    self.moviePlayer.view.addSubview(self.controllerView)

}

func movieOrientationChanged() {
    moviePlayer.view.frame = self.view.bounds
    controllerView.frame = self.moviePlayer.view.bounds
    self.showController()
}

1 - Когато видеоплейърът е отворен

2 - Когато видеоплейърът е завъртян в пейзажен режим

3 - Когато видеоплейърът се завърти обратно към портрет (все още има червен бутон в средата на видеоплейъра) въведете описание на изображението тук


person Christian Nguyen    schedule 04.09.2015    source източник
comment
Почиствате ли тези съществуващи подизгледи? напр. doneButton и playButton.   -  person Bannings    schedule 04.09.2015
comment
Как да почистите Subview (viewControll е subview, който има doneButton и playButton)   -  person Christian Nguyen    schedule 04.09.2015


Отговори (1)


Когато функцията showController() се изпълни, вие създавате нов бутон doneButton и playButton в йерархията на вашия изглед. Така че, когато завъртите към хоризонтална ориентация, ще имате два бутона doneButton на една и съща позиция и два бутона playButton в различната у-ос.

Поправете го бързо:

func showController() {
    self.controllerView.subviews.map{ $0.removeFromSuperview() } // Added this line

    doneButton = UIButton(frame: CGRectMake(0, 22, 50, 30))
    doneButton.backgroundColor = UIColor.redColor()
    doneButton.tintColor = UIColor.blackColor()
    doneButton.setTitle("Done", forState: .Normal)
    doneButton.addTarget(self, action: "exitVideo:", forControlEvents: UIControlEvents.TouchUpInside)
    self.controllerView.addSubview(doneButton)

    playButton = UIButton(frame: CGRectMake(0, self.view.bounds.size.height - 30, 60, 30))
    playButton.backgroundColor = UIColor.redColor()
    playButton.tintColor = UIColor.blackColor()
    playButton.addTarget(self, action: "pauseVideo:", forControlEvents: UIControlEvents.TouchUpInside)

    self.controllerView.addSubview(playButton)
    self.moviePlayer.view.addSubview(self.controllerView)
}
person Bannings    schedule 04.09.2015
comment
Радвам се, че ти помогна :) - person Bannings; 04.09.2015