0

This code works fine in iOS 8.0 devices, but in iOS 9.0 always getting slider value as 0.000...

(void) volumeUp{

MPVolumeView * volumeView = [[MPVolumeView alloc] init];

//find the volumeSlider
UISlider* volumeViewSlider = nil;
for (UIView *view in [volumeView subviews]){
    if ([view.class.description isEqualToString:@"MPVolumeSlider"]){
        volumeViewSlider = (UISlider*)view; // volumeViewSlider always 0.000
        break;
    }
}

[volumeViewSlider setValue: [volumeViewSlider value] + 0.0625 animated:YES];
[volumeViewSlider sendActionsForControlEvents:UIControlEventTouchUpInside];

}

How can I fix it? I need to turn up the volume 0.0625 each time.

Thanks!

kb920
  • 3,039
  • 2
  • 33
  • 44
Mitoman
  • 1
  • 1

1 Answers1

0

In your code, when you call volumeUp, then it creates a new MPVolumeView and it return 0 or something else. But if you create a MPVolumeView and hold it by property, it will give what you want.

Like this:

@interface ViewController ()
@property (strong, nonatomic) MPVolumeView *volumeView;
@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    MPVolumeView *vv = [[MPVolumeView alloc] init];
    self.volumeView = vv;
}

- (IBAction)volumeUp:(id)sender
{
    //find the volumeSlider
    UISlider* volumeViewSlider = nil;
    for (UIView *view in [self.volumeView subviews]){
        if ([view.class.description isEqualToString:@"MPVolumeSlider"]){
            volumeViewSlider = (UISlider*)view; // volumeViewSlider always 0.000
            break;
        }
    }

    [volumeViewSlider setValue: [volumeViewSlider value] + 0.0625 animated:YES];
    [volumeViewSlider sendActionsForControlEvents:UIControlEventTouchUpInside];
}
CloudTuan
  • 91
  • 3