iOS – Как отобразить всплывающее меню «AirPlay» в Swift?

Как я могу отобразить всплывающее меню AirPlay в моем проекте Swift? (Многие приложения, такие как Spotify, могут отображать его, как показано ниже):

введите описание изображения здесь


person adamsfamily    schedule 03.07.2017    source источник
comment
Посмотрите на добавление «MPVolumeView» в ваше приложение. На самом деле вы не создаете меню, но наличие этого элемента управления позволит пользователю видеть это меню, когда они нажимают на него.   -  person totiDev    schedule 03.07.2017


Ответы (2)


В конце концов, кажется, что нет простого и простого способа заставить пользовательскую кнопку отображать системное меню Airplay.

Тем не менее, @totiG указал мне на интересный ресурс, и я создал скрипт, который создает стандартный регулятор громкости за пределами видимой области экрана и имитирует нажатие кнопки Airplay:

func showAirplay() {
    let rect = CGRect(x: -100, y: 0, width: 0, height: 0)
    let airplayVolume = MPVolumeView(frame: rect)
    airplayVolume.showsVolumeSlider = false
    self.view.addSubview(airplayVolume)
    for view: UIView in airplayVolume.subviews {
        if let button = view as? UIButton {
            button.sendActions(for: .touchUpInside)
            break
        }
    }
    airplayVolume.removeFromSuperview()
}

После запуска этого кода появится следующее всплывающее меню:

введите описание изображения здесь

person adamsfamily    schedule 04.07.2017
comment
Используя этот код, я получил только прозрачный прямоугольник без ползунка или кнопки. - person Sergey Di; 06.08.2017
comment
@SergeyDi: я добавил скриншот выше, чтобы показать, что этот код делает в моей среде. Разве это не работает так же для вас? Какую версию iOS вы используете? - person adamsfamily; 07.08.2017

Вот небольшой обходной путь для использования кнопки MPVolumeView.

  1. Создайте MPVolumeView и спрячьте его где-нибудь в иерархии представлений.
  2. Всякий раз, когда вы хотите отобразить средство выбора:

[[UIApplication sharedApplication] sendAction:NSSelectorFromString(@"_displayAudioRoutePicker") to:myVolumeView from:myView forEvent:nil];

Вариант 3. На iPad вам нужно будет передать UIEvent, иначе всплывающее окно будет просто введено в верхней части экрана, и оно будет выглядеть неуверенно. Захватите событие от - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event; и передайте его в наш вызов.

person donkey    schedule 10.07.2017
comment
Я знаю, что это немного поздно, но это частный API? (Будет ли мое приложение принято в магазин приложений, если я использую это?) - person Minebomber; 04.09.2017