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];
}
Другие вопросы по тегам