Пользовательское изображение большого пальца MPVolumeView не центрировано по вертикали, начиная с iOS 5.1

Я создаю приложение, которому нужен MPVolumeView для управления громкостью. Он отлично работал до iOS 5.1, но после обновления 5.1 изображение большого пальца больше не центрировано по вертикали. Я попробовал несколько вещей, таких как изменение размеров воображения, изменение размеров моих представлений (и ползунка), но, похоже, ничего не работает, большой палец просто больше не центрирован по вертикали. Единственный способ получить большой палец по центру — это использовать стандартный iOS.

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

Вот код для MPVolumeView:

MPVolumeView *volumeView;
volumeView = [[[MPVolumeView alloc] initWithFrame:volumeViewHolder.bounds] autorelease];
[volumeViewHolder addSubview:volumeView];

UIView  *volumeViewSlider;
for (UIView *view in [volumeView subviews])
{
    if ([[[view class] description] isEqualToString:@"MPVolumeSlider"])
    {
        volumeViewSlider = view;
    }
}

[(UISlider *)volumeViewSlider setThumbImage:sliderHandleIcon forState:UIControlStateNormal];
    [(UISlider *)volumeViewSlider setMinimumTrackImage:leftTrackImage forState:UIControlStateNormal];
    [(UISlider *)volumeViewSlider setMaximumTrackImage:rightTrackImage forState:UIControlStateNormal];

VolumeViewHolder — это просто UIView размером 153x33. Я поставил большой палец в зеленый на скриншоте. введите здесь описание изображения


person Hulk_SMASH    schedule 27.06.2012    source источник
comment
У меня была та же проблема, Дэниел Амитай указал мне на решение: tibr.me/2012/07/14/customizing-mpvolumeview-appearance   -  person murze    schedule 03.09.2012
comment
Это не лучшее решение, поскольку оно заменяет реализацию MPVolumeSlider для всех MPVolumeSlider. Это приводит к смещению ползунка MPMoviePlayerViewController, который мы используем для воспроизведения других медиафайлов.   -  person Hulk_SMASH    schedule 09.10.2012
comment
@murze: Это хак, если я когда-либо видел его! Это принято Apple?   -  person Nailer    schedule 07.11.2012
comment
да, это реализовано здесь: itunes.apple.com/us/ app/radio-centraal/id567776167?mt=8   -  person murze    schedule 07.11.2012
comment
Здорово! Спасибо за быстрый ответ!   -  person Nailer    schedule 07.11.2012
comment
+1 Очень полезно для меня!   -  person Praveenkumar    schedule 09.05.2013


Ответы (2)


Возможно, лучшее решение:

Используйте увеличенное изображение с прозрачной рамкой внизу. Должно быть около 10 пикселей для дисплеев Retina.

person Nilz11    schedule 07.01.2013

та же проблема, которую я решил в одном проекте. Должен быть установлен цвет левой части и правой части с альфа = 0 - это означает, что весь ползунок прозрачный без большого пальца (без подвижной его части). После этого мы должны создать собственный вид для строки ползунка без большого пальца. В этом представлении любая цветная часть может быть смещена по вашему желанию, вверх или вниз, влево или вправо. Он получен с использованием определенного y для вашего случая:

UIView *v = [[UIView alloc] initWithFrame:CGRectMake(x,y,width, height)];

И добавьте ползунок в эту строку как подвид. Полученный вид будет слайдером. Например:

UISlider *ourSlider  = ...; 
//initialise UISlider

ourSlider.minimumTrackTintColor = [UIColor colorWithRed:0 green:122.0f/255.0f blue:1 alpha:0];

ourSlider.minimumTrackTintColor = [UIColor colorWithRed:0 green:122.0f/255.0f blue:1 alpha:0];

UIView *lineOfSliderWithoutThumb = ... ;
// creation it

[lineOfSliderWithoutThumb addSubview:ourSlider];

//после этой строкиOfSliderWithoutThumb находится наш пользовательский слайдер. Примечание: цвета там используются как цвета ползунков по умолчанию для левой и правой сторон UISlider.

person akr    schedule 13.02.2015
comment
это также для iOS 8 и iOS 7 - person akr; 31.05.2015