Как настроить MPVolumeView? - PullRequest
       21

Как настроить MPVolumeView?

19 голосов
/ 28 сентября 2010

Я перепробовал много методов для реализации обычного UISlider и управления громкостью устройства, но это все функции Native-C, которые приводят ко многим не отслеживаемым ошибкам.

Я попробовал MPVolumeView, он работает как шарм, он даже контролирует громкость устройства даже после закрытия приложения, как приложение iPod.

Мой вопрос, есть ли в любом случаенастройте MPVolumeView с определенными цветами и изображениями, как UISlider?

ПРИМЕЧАНИЕ. Я хочу легальный метод без использования частных недокументированных API.

ОБНОВЛЕНИЕ
В соответствии с ответом @Alexsander Akers, поскольку подпредставления скрыты в MPVolumeView Мне пришлось циклически перебирать подпредставления, получать UISlider и настраивать его, вот код.

IBOutlet UISlider *volumeSlider;   //defined in <class.h> and connected to a UISlider in Interface Builder

-(void) viewDidLoad {
     ....
     [self setCustomSlider];
     ....
}

-(void) setCustomSlider{
     MPVolumeView *volumeView = [[[MPVolumeView alloc] initWithFrame:[volumeSlider frame]] autorelease];
     NSArray *tempArray = volumeView.subviews;

     for (id current in tempArray){
           if ([current isKindOfClass:[UISlider class]]){
                    UISlider *tempSlider = (UISlider *) current;
                    UIImage *img = [UIImage imageNamed:@"trackImage.png"];
                    img = [img stretchableImageWithLeftCapWidth:5.0 topCapHeight:0];
                    [tempSlider setMinimumTrackImage:img forState:UIControlStateNormal];

                    [tempSlider setThumbImage:[UIImage imageNamed:@"thumbImage.png"] forState:UIControlStateNormal];

           } 
    }
    [volumeSlider removeFromSuperview];
    [self.view addSubview:volumeView];
 }

Ответы [ 5 ]

10 голосов
/ 28 сентября 2010

Вы можете попробовать просмотреть его подпредставления и найти подкласс UISlider?

8 голосов
/ 01 мая 2013

Начиная с iOS 5.0 , вы можете использовать UIAppearance на UISlider , даже когда он входит в MPVolumeView .

В любом месте вашей кодовой базы:

[[UISlider appearanceWhenContainedIn:[MPVolumeView class], nil] setMinimumTrackImage:[[UIImage imageNamed:@"nowplaying_bar_full.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(5, 25, 5, 25)] forState:UIControlStateNormal];
[[UISlider appearanceWhenContainedIn:[MPVolumeView class], nil] setMaximumTrackImage:[[UIImage imageNamed:@"nowplaying_bar_empty.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(5, 25, 5, 25)] forState:UIControlStateNormal];
[[UISlider appearanceWhenContainedIn:[MPVolumeView class], nil] setThumbImage:[UIImage imageNamed:@"nowplaying_player_nob.png"] forState:UIControlStateNormal];

Вот список некоторых других классов, которые могут быть реализованы с использованием UIAppearance: https://gist.github.com/mattt/5135521

3 голосов
/ 08 мая 2013

Теперь есть способы сделать это, просто используйте:

– setMaximumVolumeSliderImage:forState:
– setMinimumVolumeSliderImage:forState:
– setVolumeThumbImage:forState:

Какие имена методов немного отличаются от имен ванильных UISlider.

Это избавляет вас от необходимости циклически просматривать представления и потенциально может что-то сломать в будущем, когда Apple что-то изменит.

0 голосов
/ 21 ноября 2017

Ответ в Swift:

func customSlider() {
        let temp = mpVolView.subviews
        for current in temp {
            if current.isKind(of: UISlider.self) {
                let tempSlider = current as! UISlider
                tempSlider.minimumTrackTintColor = .yellow
                tempSlider.maximumTrackTintColor = .blue
            }
        }
    }

Результат:

enter image description here

0 голосов
/ 28 сентября 2010

Попробуйте использовать Уведомление , но похоже, что Apple отказывает им.


[EDIT]

Попробуйте это .

...