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