MPVolumeView не показывает кнопку маршрута при запуске

iOS 9.1 — iPhone 6S

Кнопка маршрута MPVolumeView (трансляция) не отображается при запуске приложения, даже если доступны беспроводные маршруты.

Я попытался запросить свой MPVolumeView после того, как он был создан, для проверки беспроводных маршрутов, и я получаю 0. Я могу получить только 1 (и появляется кнопка маршрута), отключив и включив WiFi для запуска уведомления.

MPVolumeView в моем приложении предназначен для управления громкостью видео, воспроизводимого из UIWebView. Кроме того, всякий раз, когда я активирую беспроводной маршрут для потоковой передачи, ползунок MPVolumeView исчезает - есть ли способ предотвратить такое поведение при использовании UIWebView для воспроизведения мультимедиа?

Ниже приведен мой код для создания MPVolumeView:

    -(void) createAndDisplayMPVolumeView{

    // Create a simple holding UIView and give it a frame

    volumeHolder = [[UIView alloc] initWithFrame: volumeSlider.frame];

    volumeHolder.autoresizingMask = UIViewAutoresizingFlexibleHeight;

    volumeSlider.hidden = YES;

    // set the UIView backgroundColor to clear.

    [volumeHolder setBackgroundColor: [UIColor clearColor]];



    // add the holding view as a subView of the main view

    [nowPlayingMainView addSubview: volumeHolder];



    // Create an instance of MPVolumeView and give it a frame

    myVolumeView = [[CustomVolumeView alloc] initWithFrame: volumeHolder.bounds];

    myVolumeView.tintColor = [UIColor darkTextColor];

    myVolumeView.showsRouteButton = YES;

    myVolumeView.showsVolumeSlider = YES;

    volumeRect = myVolumeView.frame;

    [myVolumeView setRouteButtonImage:[UIImage imageNamed:@"airplayButton"] forState:UIControlStateNormal];

    [myVolumeView setRouteButtonImage:[UIImage imageNamed:@"airplayButtonHighlighted"] forState:UIControlStateHighlighted];

    [myVolumeView setRouteButtonImage:[UIImage imageNamed:@"airplayButtonSelected"] forState:UIControlStateSelected];

    [volumeHolder addSubview: myVolumeView];
}

person Elldo    schedule 10.03.2016    source источник
comment
Убедитесь, что вы тестируете на самом устройстве. В симуляторе этого не будет.   -  person kvr    schedule 10.03.2016
comment
Я использую iPhone 6S (аппаратно)   -  person Elldo    schedule 10.03.2016


Ответы (1)


Как сказал @kvr, первый тест на аппаратном устройстве

Кнопка маршрута Airplay появляется, когда доступно более одного маршрута.

Уловка, которую я нашел для постоянного отображения кнопки Airplay, заключается в том, чтобы скрыть кнопку маршрута MPVolumeView, удалить пользовательское взаимодействие с пользователем MPVolumeView и настроить действие кнопки маршрута с помощью оболочки UIButton.

var airplayRouteButton: UIButton?

private func airPlayButton() -> UIButton {
    let wrapperView = UIButton(frame: CGRect(x: 0, y: 0, width: 44, height: 44))
    wrapperView.setImage(YOUR_AIRPLAY_IMAGE, for: UIControlState.normal)
    wrapperView.backgroundColor = .clear
    wrapperView.addTarget(self, action: #selector(PlayerView.replaceRouteButton), for: UIControlEvents.touchUpInside)

    let volumeView = MPVolumeView(frame: wrapperView.bounds)
    volumeView.showsVolumeSlider = false
    volumeView.showsRouteButton = false
    volumeView.isUserInteractionEnabled = false

    self.airplayRouteButton = volumeView.subviews.filter { $0 is UIButton }.first as? UIButton

    wrapperView.addSubview(volumeView)

    return wrapperView
}

@objc private func replaceRouteButton() {
    airplayRouteButton?.sendActions(for: .touchUpInside)
}
person raphael    schedule 17.10.2017
comment
и где вы называете эту приватную функцию airPlayButton() -> UIButton {..} @raphael - person Aragunz; 07.12.2017
comment
@Aragunz, вы можете вызвать viewDidLoad вашего ViewController: airplayRouteButton = airPlayButton() - person raphael; 08.12.2017
comment
Я сделал это так: aView.addSubview(airPlayButton()) - person Aragunz; 08.12.2017