2012-06-27 23 views
7

के बाद लंबवत केंद्रित नहीं है मैं वॉल्यूम को नियंत्रित करने के लिए एक MPVolumeView की आवश्यकता वाले एक एप्लिकेशन का निर्माण कर रहा हूं। यह आईओएस 5.1 से पहले पूरी तरह से काम करता था, लेकिन 5.1 अपडेट के बाद से अंगूठे की छवि अब लंबवत केंद्रित नहीं है। मैंने कुछ चीजों की कोशिश की जैसे कल्पना आयाम बदलना, मेरे विचारों का आकार बदलना (और स्लाइडर) लेकिन कुछ भी काम नहीं करता है, अंगूठे अब लंबवत केंद्रित नहीं है। एकमात्र तरीका मैं एक केंद्रित अंगूठे प्राप्त करता हूं अगर मैं डिफ़ॉल्ट आईओएस का उपयोग करता हूं।कस्टम MPVolumeView थंब छवि आईओएस 5.1

मैंने सटीक न्यूनतम, अधिकतम और अंगूठे छवि के साथ एक अन्य दृश्य में UISlider जोड़ने का प्रयास किया और वह ठीक से केंद्रित है।

यहाँ MPVolumeView के लिए कोड है:

MPVolumeView *volumeView; 
volumeView = [[[MPVolumeView alloc] initWithFrame:volumeViewHolder.bounds] autorelease]; 
[volumeViewHolder addSubview:volumeView]; 

UIView *volumeViewSlider; 
for (UIView *view in [volumeView subviews]) 
{ 
    if ([[[view class] description] isEqualToString:@"MPVolumeSlider"]) 
    { 
     volumeViewSlider = view; 
    } 
} 

[(UISlider *)volumeViewSlider setThumbImage:sliderHandleIcon forState:UIControlStateNormal]; 
    [(UISlider *)volumeViewSlider setMinimumTrackImage:leftTrackImage forState:UIControlStateNormal]; 
    [(UISlider *)volumeViewSlider setMaximumTrackImage:rightTrackImage forState:UIControlStateNormal]; 

volumeViewHolder thats 153x33 सिर्फ एक UIView है। मैंने स्क्रीनशॉट में हरे रंग में अंगूठे डाल दिया। enter image description here

+0

मुझे एक ही समस्या थी, [डैनियल अमिते] (http://stackoverflow.com/users/314042/daniel-amitay) ने मुझे समाधान के लिए इंगित किया: http://tibr.me/2012/07/14/ customizing-mpvolumeview-display/ – murze

+0

यह एक अच्छा समाधान नहीं है क्योंकि यह MPVolumeSlider कार्यान्वयन को सभी MPVolumeSlider के लिए प्रतिस्थापित करता है। यह MPMoviePlayerViewController स्लाइडर में ऑफ़सेट का कारण बनता है जिसे हम अन्य मीडिया चलाने के लिए उपयोग करते हैं। –

+0

@murze: अगर मैंने कभी देखा तो यह एक हैक है! क्या यह ऐप्पल द्वारा स्वीकार किया जाता है? – Nailer

उत्तर

4

हो सकता है कि एक बेहतर समाधान:

उपयोगकर्ता तल पर एक पारदर्शी सीमा के साथ कोई बड़ा चित्र। रेटिना डिस्प्ले के लिए लगभग 10px होना चाहिए।

+0

एक आकर्षण की तरह काम किया! –

0

एक ही समस्या में मैंने एक ही समस्या में हल किया। अल्फा = 0 -it के साथ बाएं भाग और दाहिने हिस्से का रंग सेट किया जाना चाहिए अंगूठे के बिना पारदर्शी सभी स्लाइडर (इसके बिना मूवबल भाग के)। स्लाइडर की लाइन के लिए अंगूठे के बिना कस्टम दृश्य बनाना होगा। इस दृश्य में किसी भी रंगीन भाग को आप ऊपरी या नीचे, बाएं या दाएं के रूप में स्थानांतरित कर सकते हैं। यह अपने इस अवसर के लिए परिभाषित y का उपयोग कर प्राप्त:

UIView *v = [[UIView alloc] initWithFrame:CGRectMake(x,y,width, height)]; 

और subview के रूप इस लाइन के लिए स्लाइडर जोड़ें। परिणाम दृश्य स्लाइडर होगा। उदाहरण के लिए:

UISlider *ourSlider = ...; 
//initialise UISlider 

ourSlider.minimumTrackTintColor = [UIColor colorWithRed:0 green:122.0f/255.0f blue:1 alpha:0]; 

ourSlider.minimumTrackTintColor = [UIColor colorWithRed:0 green:122.0f/255.0f blue:1 alpha:0]; 

UIView *lineOfSliderWithoutThumb = ... ; 
// creation it 

[lineOfSliderWithoutThumb addSubview:ourSlider]; 

// के बाद इस lineOfSliderWithoutThumb हमारे कस्टम uislider है। नोट: UISlider के बाएं और दाएं किनारे के डिफ़ॉल्ट स्लाइडर रंग के रूप में रंगों का उपयोग किया जाता है।

+0

यह आईओएस 8 और आईओएस 7 के लिए भी है – akr