2013-05-01 2 views
4

Использование MPVolumeView Я хотел создать кнопку выхода AirPlay для аудио приложения.Кнопка MPVolumeView AirPlay не отображается

MPVolumeView *volumeView = [ [MPVolumeView alloc] initWithFrame:CGRectMake(20, 20, 220, 20)]; 
    [volumeView setShowsVolumeSlider:NO]; 
    [volumeView setShowsRouteButton:YES]; 
    [volumeView sizeToFit]; 
    [self.view addSubview:volumeView]; 
    [volumeView release]; 

Ошибки/проблемы нет, но это не отображается, любые идеи?
Спасибо!

+0

Я просто использовал ваш код, и он отлично работает. Появляется кнопка трансляции, и действие работает ... Вы добавляете это в tableView или что-то еще? –

ответ

3

вместо init, отправьте сообщение initWithFrame: (CGRect). Похоже, что точка зрения есть, он просто имеет раму (0,0,0,0)

Вот код:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    // Override point for customization after application launch. 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    ViewController *vc = [[ViewController alloc] init]; 
    [vc.view setBackgroundColor:[UIColor redColor]]; 
    MPVolumeView *volumeView = [[MPVolumeView alloc] initWithFrame:CGRectMake(20, 20, 200, 50)]; 
    [volumeView setShowsVolumeSlider:YES]; 
    [volumeView setShowsRouteButton:YES]; 
    [volumeView sizeToFit]; 
    [vc.view addSubview:volumeView]; 
    UILabel *testLabel = [[UILabel alloc] initWithFrame:CGRectMake(50, 50, 200, 50)]; 
    testLabel.text = @"TESTING"; 
    [vc.view addSubview:testLabel]; 
    [self.window setRootViewController:vc]; 
    [self.window makeKeyAndVisible]; 
    [vc viewDidLoad]; 
    return YES; 
} 

Он работает при тестировании на устройстве:

enter image description here

+0

Спасибо, обновлено до initWithFrame: CGRectMake (20, 20, 220, 20), но все же:/ –

+0

Я предполагаю, что self.view является ссылкой на главный вид ViewController? И поскольку все, скомпилированное без проблем, добавило в свой заголовочный файл соответствующий оператор импорта? –

+0

yes, self.view работает со всеми остальными элементами и справа, без проблем, импортируется MediaPlayer/MediaPlayer.h. есть идеи? –

6

Возможно, вы размещаете свой VolumeView на белом фоне. Кнопка маршрута Airplay белая перед ее использованием (например, когда она не маршрутизируется через AirPlay), поэтому, если вы установите элемент управления на белый фон, вы не увидите его, но он будет реагировать на краны. Измените фон на что-то наподобие красного, как показано выше, и он показывает.

0

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

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

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) 
} 
Смежные вопросы