ios7 регулирует громкость iPodMusicPlayer
Я пишу приложение для ios7, которое должно контролировать громкость встроенного музыкального проигрывателя или уровень громкости в целом. Я пытался использовать MediaPlayer.framework, но не уверен, что это правильно. Мне интересно, как лучше это сделать. Спасибо!
3 ответа
По словам Apple, в настройках iOS7 MPMusicPlayerController
"s volume
устарела:
// The current volume of playing music, in the range of 0.0 to 1.0.
// This property is deprecated -- use MPVolumeView for volume control instead.
@property(nonatomic) float volume NS_DEPRECATED_IOS(3_0, 7_0);
Apple рекомендует использовать MPVolumeView
, так что я придумал это:
добавлять volumeSlider
имущество:
@property (nonatomic, strong) UISlider *volumeSlider;
В этом MPVolumeView
и добавить куда-нибудь в свой вид (может быть скрыт, без рамки или пусто из-за showsRouteButton = NO
а также showsVolumeSlider = NO
):
MPVolumeView *volumeView = [MPVolumeView new];
volumeView.showsRouteButton = NO;
volumeView.showsVolumeSlider = NO;
[self.view addSubview:volumeView];
Найти и сохранить ссылку на UISlider
:
__weak __typeof(self)weakSelf = self;
[[volumeView subviews] enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
if ([obj isKindOfClass:[UISlider class]]) {
__strong __typeof(weakSelf)strongSelf = weakSelf;
strongSelf.volumeSlider = obj;
*stop = YES;
}
}];
Добавить целевое действие для UIControlEventValueChanged
:
[self.volumeSlider addTarget:self action:@selector(handleVolumeChanged:) forControlEvents:UIControlEventValueChanged];
А затем определить изменение громкости (т.е. с помощью аппаратных регуляторов громкости):
- (void)handleVolumeChanged:(id)sender
{
NSLog(@"%s - %f", __PRETTY_FUNCTION__, self.volumeSlider.value);
}
а также наоборот, вы можете установить громкость с помощью:
self.volumeSlider.value = < some value between 0.0f and 1.0f >;
Надеюсь, это поможет (и что Apple не удаляет MPVolumeSlider из MPVolumeView).
Использование iPodMusicPlayer также повлияет на фактическую настройку громкости iPod. Если вы хотите избежать этого, используйте это
#import <MediaPlayer/MediaPlayer.h>
// ...
MPMusicPlayerController *musicPlayer = [MPMusicPlayerController applicationMusicPlayer];
musicPlayer.volume = slider.value; //float value for volume
Или попробуйте с:
MPMusicPlayerController *musicPlayer = = [MPMusicPlayerController iPodMusicPlayer];
musicPlayer.volume = slider.value; //float value for volume
Попробуй это
[[MPMusicPlayerController applicationMusicPlayer] setVolume:(use a value between 0.0 and 1.0)]
попробуйте это, если вы хотите обеспечить регулятор громкости
MPVolumeView *myVolumeView =
[[MPVolumeView alloc] initWithFrame: CGRectMake(70, 300, 200, 40)];
[myVolumeView setShowsVolumeSlider:YES];
[myVolumeView setShowsRouteButton:YES];
[myVolumeView sizeToFit];
[myVolumeView setBackgroundColor:[UIColor cyanColor]];
CGAffineTransform trans = CGAffineTransformMakeRotation(M_PI * 0.5);
myVolumeView.transform = trans;
[moviePlayerContlr.view addSubview: myVolumeView];
ВАРИАНТ:
UISlider * aSlider;
aSlider = [[UISlider alloc] initWithFrame:CGRectMake(70, 200, 100, 40)];
[aSlider setMaximumValue:0];
[aSlider setMaximumValue:1];
[aSlider addTarget:self action:@selector(aSliderAction:) forControlEvents:UIControlEventValueChanged];
[moviePlayerContlr.view addSubview:aSlider];
UIImage *stetchTrack = [[UIImage imageNamed:@"faderTrack.png"]
stretchableImageWithLeftCapWidth:10.0 topCapHeight:0.0];
[aSlider setThumbImage: [UIImage imageNamed:@"faderKey.png"] forState:UIControlStateNormal];
[aSlider setMinimumTrackImage:stetchTrack forState:UIControlStateNormal];
[aSlider setMaximumTrackImage:stetchTrack forState:UIControlStateNormal];
CGAffineTransform tran = CGAffineTransformMakeRotation(M_PI * -0.5);
aSlider.transform = trans;
- (void)aSliderAction:(id)sender
{
NSLog(@"%d",(int)[aSlider value]);;
[[MPMusicPlayerController applicationMusicPlayer] setVolume:aSlider.value];
}