Как мне снова включить наложение громкости системы после использования MPVolumeView?

Я создаю аудиоплеер для неродного звукового формата. Иерархия приложений основана на iPod.app. У него есть несколько UITableView и один UIView ( TrackView ), который использует MPVolumeView , чтобы позволить пользователю изменять громкость. на экране. Пока TrackView не станет видимым в первый раз, изменение громкости с помощью аппаратных кнопок отображает наложение громкости системы, как ожидалось (и желательно). Когда TrackView виден, эти наложения не отображаются, поскольку MPVolumeView обновляется при изменении громкости с помощью аппаратных кнопок (также желательно).

Вот проблема: как только вы вернетесь из TrackView наложение системной громкости не отображается при использовании аппаратных кнопок громкости. Я попытался программно выделить, создать и добавить MPVolumeView в TrackViewController viewWillAppear: , а затем удалить, освободить и обнулить тот же MPVolumeView в TrackController] viewWillDisappear: .

Этого не происходит в iPod.app. После выхода из представления, содержащего MPVolumeView , при использовании аппаратных кнопок громкости отображаются наложения громкости.

Что мне не хватает?


Обновление 2: Это похоже на ошибка в MPVolumeView, которая появилась где-то после iOS 3.2 и исправлена ​​в 4.2.


Обновление: Я сделал простое сокращение из проекта оконного приложения по умолчанию, которое демонстрирует такое же поведение. Как только MPVolumeView станет видимым, оверлеи системного тома больше никогда не появятся в приложении.

VolumeAppDelegate.h:

#import <UIKit/UIKit.h>
#import <MediaPlayer/MediaPlayer.h>

@interface VolumeAppDelegate : NSObject <UIApplicationDelegate> {
    UIWindow *window;
    IBOutlet UIView *volumeView;
    IBOutlet MPVolumeView *mpVolumeView;
}

@property (nonatomic, retain) IBOutlet UIWindow *window;

-(IBAction)toggleVolumeView:(id)sender;

@end

VolumeAppDelegate.m:

#import "VolumeAppDelegate.h"

@implementation VolumeAppDelegate

@synthesize window;

-(IBAction)toggleVolumeView:(id)sender{

    if (mpVolumeView == nil){
        mpVolumeView = [[MPVolumeView alloc] initWithFrame:volumeView.bounds];
        [volumeView addSubview:mpVolumeView];
    }
    else{
        [mpVolumeView removeFromSuperview];
        [mpVolumeView release];
        mpVolumeView = nil;
    }
}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

    [self.window makeKeyAndVisible];
    mpVolumeView = nil;
    return YES;
}

- (void)dealloc {
    [window release];
    [super dealloc];
}

@end

Вам нужно будет добавить платформу MediaPlayer в свой проект в Xcode и открыть вверх MainWindow.xib в построителе интерфейсов, чтобы добавить UIView и UIButton IBOutlets и подключить IBAction к UIButton.

54
задан Shaun Inman 2 February 2011 в 11:44
поделиться