Итак, у меня есть приложение iOS7, в котором я использую MPVolumeView
, чтобы пользователь мог контролировать уровень громкости. У меня есть кнопка маршрута, скрытая на этом MPVolumeView
, и используйте другой MPVolumeView
, а слайдер отключен как значок AirPlay.MPVolumeView неправильно перерисовывается в iOS 7
Мое приложение поддерживает как портретную, так и ландшафтную ориентации, а ползунок громкости - это разная ширина в этих двух разных режимах.
Если представление сначала инициализируется в ландшафтном режиме, то MPVolumeView
правильно изменит размер.
Однако, когда представление инициализируется в портретном режиме, а затем я поворачиваюсь в альбомный режим, ВСЕ в приложении меняются/перемещаются, за исключением того, что MPVolumeView
только перемещается, и он не становится короче, как должен.
Я использую пользовательские изображения на MPVolumeView
, и если я удаляю пользовательские изображения для трека, эта проблема исчезнет.
Вот код, используемый для инициализации MPVolumeView
self.volumeView = [[MPVolumeView alloc] initWithFrame:CGRectZero];
self.volumeView.showsRouteButton = NO;
self.volumeView.layer.borderColor = [[UIColor redColor] CGColor];
self.volumeView.layer.borderWidth = 1.0f;
if (AT_LEAST_IOS7) {
// TODO: BUGBUG iOS7 doesn't redraw this MPVolumeView correctly when it's frame changes (i.e. we rotate to the portrait view).
// These images simply make the bar a little thicker than the standard thickness (to match the iOS7 music app) but it's not redrawing
// correctly so we are going to have to live with a slightly thinner bar.
[self.volumeView setMaximumVolumeSliderImage:[UIImage imageNamed:@"volume_bar_max"] forState:UIControlStateNormal];
[self.volumeView setMinimumVolumeSliderImage:[UIImage imageNamed:@"volume_bar_min"] forState:UIControlStateNormal];
[self.volumeView setVolumeThumbImage:[UIImage imageNamed:@"volume_scrubber"] forState:UIControlStateNormal];
}
[self addSubview:self.volumeView];
И в layoutSubviews я репозиционирование/масштабирования это рама:
self.volumeView.frame = CGRectIntegral(CGRectMake(controlsLeft + kEdgeToSliderSideWidth,
volumeTop,
controlsWidth - (2 * kEdgeToSliderSideWidth),
volumeSize.height));
Вот как это выглядит, когда представление начинается в Портретный режим: (общая ширина 640 пикселей)
И когда он получает поворачивается на альбомную он заканчивает тем, как это: (общая ширина 568 пикселей)
Кто-нибудь есть какие-нибудь идеи?
Это хорошо, чтобы знать, что это не только у нас! Спасибо, что поделились своим обходом. – jrwagz