Итак, у меня есть приложение iOS7, в котором я использую MPVolumeView
, чтобы пользователь мог контролировать уровень громкости. У меня есть кнопка маршрута, скрытая на этом конкретном MPVolumeView
, и я использую другой MPVolumeView
с отключенным ползунком в качестве значка AirPlay.
Мое приложение поддерживает как книжную, так и альбомную ориентацию, а ползунок громкости имеет разную ширину в этих двух разных режимах.
Если вид сначала инициализируется в ландшафтном режиме, тогда 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 пикселей)
У кого-нибудь есть идеи?