2010-11-28 11 views
54

मैं एक गैर देशी देशी प्रारूप के लिए एक ऑडियो प्लेयर बना रहा हूँ। एप्लिकेशन का पदानुक्रम आईपॉड.एप पर आधारित है। यह UITableView की और एक UIView (TrackView) के एक नंबर एक MPVolumeView का उपयोग करता है उपयोगकर्ता मात्रा परदे पर बदलने के लिए अनुमति देने के लिए है। पहली बार जब तक TrackView हार्डवेयर बटन का उपयोग करके वॉल्यूम को बदलना दिखाई देता है, तो सिस्टम वॉल्यूम ओवरले अपेक्षित (और वांछित) प्रदर्शित करता है। जब TrackView दिखाई देता है तो ये ओवरले दिखाई नहीं देते हैं क्योंकि MPVolumeView हार्डवेयर बटन (वांछित) के साथ वॉल्यूम बदलते समय अपडेट नहीं होते हैं।MPVolumeView का उपयोग करने के बाद मैं सिस्टम वॉल्यूम ओवरले को वापस कैसे चालू करूं?

यहाँ समस्या है: जब आप वापस TrackView से बाहर प्रणाली मात्रा ओवरले जब हार्डवेयर मात्रा बटन का उपयोग कर प्रकट नहीं होता है। मैं प्रोग्राम allocing बनाने और TrackViewController viewWillAppear: में MPVolumeView जोड़ने और फिर हटाने, को छोड़ता है और शून्य-इंग ही MPVolumeViewTrackViewController viewWillDisappear: में कोशिश की है।

यह iPod.app में नहीं होता है। एक बार उस दृश्य से पीछे हटने के बाद जिसमें MPVolumeView हार्डवेयर वॉल्यूम बटन का उपयोग करते समय सिस्टम वॉल्यूम ओवरले प्रदर्शित होता है।

मुझे क्या याद आ रही है?


अद्यतन 2: यह MPVolumeView में एक बग कि आईओएस 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 

आप Xcode में अपनी परियोजना के लिए MediaPlayer ढांचे जोड़ सकते हैं और करने के लिए इंटरफ़ेस बिल्डर में MainWindow.xib को खोलने के लिए की आवश्यकता होगी UIView और UIButton IBOutlets जोड़ें और UIButton में IBAction को हुकअप करें।

+0

इस आइपॉड पर एक समस्या आईओएस 4.1 चल छू लेती है प्रतीत होता है। आईओएस 3.2 के साथ मेरे आईपैड पर चल रहा एक ही एप्लीकेशन इस समस्या को प्रदर्शित नहीं करता है। मैं आईओएस 4.2 में अपने आईपॉड स्पर्शों में से एक को अपडेट कर रहा हूं यह देखने के लिए कि समस्या ठीक हो गई है या नहीं। (किसी भी मामले में मैं अभी भी एक समाधान की तलाश में हूं क्योंकि 4.1 पर iPod.app इस व्यवहार को प्रदर्शित नहीं करता है।) –

+0

समस्या आईओएस 4.2 में तय की गई प्रतीत होती है लेकिन अगर किसी के पास पिछले संस्करणों का समाधान है, तो मुझे अभी भी दिलचस्पी है। –

+0

मुझे 4.2.1 पर एक ही समस्या का सामना करना पड़ रहा है, मेरा MPVolumeView हमेशा दिखाई नहीं देता है लेकिन स्क्रीन पर एक टैप के जवाब में दिखाया गया है और छिपा हुआ है। जब आपके ट्रैक व्यू के बराबर पहले लोड किया जाता है तो वॉल्यूम व्यू दिखाई नहीं देता है और वॉल्यूम बटन परिवर्तन के जवाब में सिस्टम वॉल्यूम ओवरले दिखाया जाता है। एक बार MPVolumeView दिखाया गया है कि वॉल्यूम ओवरले अब दिखाई नहीं दे रहा है (भले ही MPVolumeView बाद में छिपा हुआ हो) जब तक दृश्य दृश्य से हटा दिया जाता है और फिर जोड़ा जाता है। – prendio2

उत्तर

1

यह दुख की बात है कि आईओएस के पिछले संस्करणों में निजी ढांचे के साथ यह एक मुद्दा है।

मैं इस के लिए एक समाधान बनाने के लिए अपनी इच्छा को समझते हैं, लेकिन यह निजी ढांचे में हेरफेर करने के लिए अपने कोड का कारण होता है, अपने app अनुमोदन पास नहीं कर पा रही है।

सौभाग्य से, संस्करण अवधि है कि इस त्रुटि थी कम है, और इन संस्करण के साथ प्रचलन में उपकरणों की संख्या मिनट से पतले बढ़ रहे हैं।

0

आप बढ़ाने के लिए और प्रोग्राम के रूप में की तरह से डिवाइस वॉल्यूम को कम कर सकते हैं:

- (void)setVolume:(float)Level 
{ 

    OSStatus errorMsg = AudioQueueSetParameter(audioQueue, kAudioQueueParam_Volume, Level); 

    if (errorMsg) { 
     NSLog(@"%d", errorMsg); 
    } 

}