2009-09-16 15 views
10

मेरा लक्ष्य अंगूठे छवि के लिए 35 पिक्सल ऊंचाई के साथ एक बड़ा यूआईस्लाइडर बनाना है।बड़ा यूआईस्लाइडर ठीक है लेकिन ज़ोन समस्या को ट्रैक करना

मैं UISlider subclassed और विधि कहा:

मेरे बड़े अंगूठे में अच्छी तरह से प्रदर्शित किया जाता है:

- (CGRect)trackRectForBounds:(CGRect)bounds 
{ 
    return CGRectMake(bounds.origin.x, bounds.origin.y, self.bounds.size.width, 50); 
} 

तब मैं setThumbImage उपयोग करते हुए मेरे नियंत्रक से थुम छवि निर्धारित किया है।

मेरी समस्या यह है कि ट्रैकिंग क्षेत्र अभी भी लगभग 1 9 पीएक्स ऊंचाई के आसपास है, इसे 50 तक कैसे बढ़ाया जाए?

धन्यवाद

टी

उत्तर

0

मुझे विश्वास है कि आप thumbRectForBounds:trackRect:value:

+2

दुर्भाग्यवश, यूआईस्लाइडर स्लाइडर अंगूठे के स्पर्श क्षेत्र को निर्धारित करने के लिए इस फ़ंक्शन से वापसी का उपयोग नहीं करता है। –

+0

thumbRectForBounds विधि को कैसे कॉल करें, क्या यह UISlider प्रतिनिधि विधि है? –

31

iPhone OS 'UISlider नियंत्रण के साथ एक लंबे समय से खड़ी समस्या को देखने के लिए चाहते हो सकता है है कि आप इसे लम्बे नहीं कर सकते हैं । अधिक विशेष रूप से, आप इसे अपने अंगूठे और ट्रैक के लिए लम्बे चित्रों को निर्दिष्ट करके लम्बे लग सकते हैं, लेकिन स्पर्श क्षेत्र एक छोटे से 23px लंबा रहता है।

Michael Patricios has published a way डिफ़ॉल्ट स्लाइडर को स्पर्श करना बहुत आसान बनाने के लिए, और उस तकनीक की एक भिन्नता बड़े स्लाइडर्स को संभाल सकती है। आपको क्या करने की जरूरत है उपवर्ग UISlider है, और अपनी कक्षा में pointInside ओवरराइड:

// How many extra touchable pixels you want above and below the 23px slider 
#define SIZE_EXTENSION_Y 10 

- (BOOL) pointInside:(CGPoint)point withEvent:(UIEvent*)event { 
    CGRect bounds = self.bounds; 
    bounds = CGRectInset(bounds, 0, SIZE_EXTENSION_Y); 
    return CGRectContainsPoint(bounds, point); 
} 

इंटरफ़ेस बिल्डर में, अपने नए UISlider उपवर्ग उपयोग करने के लिए स्लाइडर सेट, और अब आप एक 43px स्पर्श ऊंचाई के साथ एक स्लाइडर की है।

+2

छोटे सुधार: मुझे लगता है कि आप रेक्ट बड़ा बनाने के लिए एक नकारात्मक SIZE_EXTENSION_Y मान को CGRectInset में पास करना चाहते हैं। – Kelan

+3

केलन सही है, -10 का मूल्य अच्छी तरह से काम करता है। –

+1

धन्यवाद, धन्यवाद, धन्यवाद! -10 की एक सेटिंग के साथ यह पूरी तरह से काम किया! मैं कुछ समय के लिए इस समस्या को हल करने की कोशिश कर रहा था, और यह खूबसूरती से काम किया। –

11

मैं इस समाधान :)

CGRect sliderFrame = self.mySlider.frame;  
sliderFrame.size.height = 142.0; 
[self.mySlider setFrame:sliderFrame]; 
+0

में काम नहीं प्रतीत होता है यह समाधान @ एलन पाइक की तुलना में आसान तरीका लगता है। ऐसा लगता है कि यह भी काम कर रहा है। क्या कोई कारण है कि उसका जवाब आपके ऊपर पेश किया गया है? – marcgg

+1

@marcgg मुझे लगता है कि यह केवल इसलिए है क्योंकि मैंने बाद में अपना जवाब जोड़ा ... – alexhajdu

+0

यह काम करता है लेकिन यह स्लाइडर को लंबवत ऑफसेट करता है, लेकिन यह ठीक करने के लिए काफी आसान है। –

8

बढ़ाएँ UISlider अंगूठे हिट क्षेत्र का उपयोग कर रहा UISlider फ्रेम की ऊंचाई बढ़ाने के द्वारा। यह दृष्टिकोण स्लाइडर फ्रेम को सही करने के लिए किसी ऑफसेट और बाद की आवश्यकता से बचाता है।

- (void)viewDidLoad{ 
    [super viewDidLoad]; 

    //expand slider hit area 
    self.slider.frame = CGRectInset(self.slider.frame, 0, -10); 

} 
+0

यह उत्तर उपरोक्त दो की तुलना में बहुत आसान है। बहुत अच्छा काम करता है। धन्यवाद! – chazzwozzer

+0

बहुत बढ़िया समाधान – malaki1974

संबंधित मुद्दे