deleted-mezhevikin
@deleted-mezhevikin

Проблема с позиционированием AirPlayButton в MPVolumeView?

Получаю MPVolumeView (MediaPlayer.framework). Так как нет проперти с кнопкой аирплей, перебором сабвью нахожу кнопку и добавляю ей frame = CGRectMake(20, 20, 20, 20);

Высота и ширина меняются а вот позиция x и y неизменная независимо от значений.

Почему так проиcходит?

Скрин:
e44de8834d4d724c6ce46560781eb785.png

Код:
//
//  ViewController.m
//

#import "ViewController.h"
#import <MediaPlayer/MediaPlayer.h>

@implementation ViewController

- (void)viewDidLoad
{
    self.view.backgroundColor = [UIColor grayColor];
    [self addAirPlayButton];
    [super viewDidLoad];
}

- (void)addAirPlayButton
{
    // Зеленая вью - контейнер
    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 50, 50)];
    view.backgroundColor = [UIColor greenColor];
    
    // MPVolumeView - черная
    MPVolumeView *volumeView = [[MPVolumeView alloc] initWithFrame:CGRectZero];
    volumeView.backgroundColor = [UIColor blackColor];
    // показываем кнопку airplay и скрываем слайдер громкости
    volumeView.showsRouteButton = YES;
    volumeView.showsVolumeSlider = NO;
    // Устанавливаем свою иконку на аирплей кнопку
    [volumeView setRouteButtonImage:[UIImage imageNamed:@"Airplay.png"] forState:UIControlStateNormal];

    // находим кнопку в subviews
    for (id view in volumeView.subviews)
    {
        if ([[[view class] description] isEqualToString:@"MPButton"])
        {
            // делаем кнопку оранжевой и пытаемся сделать отступ от родительского зеленого вью
            // размеры кнопки изменились а вот координаты x и y как будто не работают
            UIButton *airPlayButton = (UIButton *)view;
            airPlayButton.frame = CGRectMake(20, 20, 20, 20);
            airPlayButton.backgroundColor = [UIColor orangeColor];
        }
    }
    
    [view addSubview:volumeView];
    [self.view addSubview:view];
}

@end


github.com/nullproduction/AirPlayButton — проект на гитхаб

P.S данный пример будет работать только на реальном устройстве и кнопка airplay появится при наличии airplay устройства в сети.
  • Вопрос задан
  • 2922 просмотра
Пригласить эксперта
Ответы на вопрос 1
Agent_Smith
@Agent_Smith
А зачем вы теребите сабвьюхи и меняете кнопке фрейм? Эта кнопка динамически добавляется/удаляется из сабвьюх еще и с анимацией, и ставя фрейм руками вы ломаете весь внутренний лайаут. Делайте MPVolumeView sizeToFit, и двигайте сам MPVolumeView. Если вам нужна иконка большего размера, вырежьте ее под нужный размер и установите через Apearance.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы