2012-01-09 7 views
41

मेरे ऐप में, मेरे पास विभिन्न मानों को बदलने के लिए कुछ UISlider उदाहरण हैं। मान स्लाइडर के बगल में प्रदर्शित होते हैं, साथ ही ऐप के दूसरे दृश्य भाग में 3 डी स्पेस में प्रस्तुत किए जाते हैं।जांचें कि क्या उपयोगकर्ता निरंतर UISlider पर स्लाइडिंग समाप्त कर रहा है?

3 डी भाग में कुछ भारी गणनाएं शामिल हैं, और अभी स्लाइडर परिवर्तनों के रूप में इसे अपडेट करना संभव नहीं लगता है। इसका मतलब यह होगा कि मुझे स्लाइडर की continuous प्रॉपर्टी को NO पर सेट करना होगा, इसलिए जब स्लाइडर बदलना समाप्त हो जाता है तो केवल अपडेट प्राप्त होते हैं।

मैं प्रदर्शित करना चाहता हूं मूल्य अद्यतन लाइव, हालांकि। क्या एक स्लाइडर है जो निरंतर है (इसलिए मैं वास्तविक समय में अपना मूल्य-लेबल अपडेट कर सकता हूं) और फिर भी उपयोगकर्ता ने इसके साथ बातचीत करने के बाद किसी प्रकार का संदेश भेज दिया है? मेरा आंत महसूस अभी यूआईएसलाइडर को उपclass करना है और touchesEnded: विधि को ओवरराइड करना है। क्या यह व्यवहार्य है?

उत्तर

72

आप इसे सरल लक्ष्य/क्रियाओं के साथ कर सकते हैं।

UIControlEventValueChanged ईवेंट के लिए एक लक्ष्य और कार्रवाई सेट करें, और फिर UIControlEventTouchUpInside ईवेंट के लिए एक और लक्ष्य और कार्रवाई सेट करें। continuous संपत्ति YES पर सेट की गई है, तो मूल्य बदल गया ईवेंट फिसल जाएगा क्योंकि स्लाइडर मूल्य बदलता है, जबकि ईवेंट के अंदर स्पर्श केवल तभी आग लग जाएगा जब उपयोगकर्ता नियंत्रण जारी करेगा।

+0

धन्यवाद एक बहुत। यही वही है जो मैंने देखा था। – winsmith

+1

आईओएस 7 पर अचानक काम नहीं करता है, अचानक। 6 अभी भी कार्यात्मक है। – dklt

+1

@dklt क्या आपने http://bugreport.apple.com – Jasarien

15

यह भी ध्यान दें कि आपको UIControlEventTouchUpOutside ईवेंट को कनेक्ट करना चाहिए, साथ ही उपयोगकर्ता इसे उठाने से पहले नियंत्रण से बाहर अपनी उंगली खींच लेता है।

16

मुझे बस ऐसा करना पड़ा, इसलिए मैंने स्पर्श गुणों को देखा, और पूर्ण IBAction शीर्षलेख का उपयोग किया।

यह उन लोगों के लिए एक व्यवहार्य विकल्प होना चाहिए जो कुछ अतिरिक्त नियंत्रण चाहते हैं, हालांकि कोड की तरफ जास निश्चित रूप से आसान है।

- (IBAction)itemSlider:(UISlider *)itemSlider withEvent:(UIEvent*)e; 
{ 
    UITouch * touch = [e.allTouches anyObject]; 

    if(touch.phase != UITouchPhaseMoved && touch.phase != UITouchPhaseBegan) 
    { 
     //The user hasn't ended using the slider yet. 
    } 

} 

: डी

+0

आईओएस 5 और आईओएस 7 पर परीक्षण किया गया, दोनों मामलों में अच्छी तरह से काम करता है। मुझे विश्वास नहीं है कि मुझे नहीं पता था कि एक इवेंट पैरामीटर भेजा जा रहा है। –

+0

@ alex-i जब मुझे इस विधि को कॉल करना चाहिए ??? – user2545330

+3

@ user2545330 '[स्लाइडर एडटेक्चर: @ चयनकर्ता (itemSlider: withEvent :) forControlEvents: UIControlEventValueChanged];' - स्लाइडर मान में परिवर्तन होने पर यह उपर्युक्त विधि को कॉल करेगा। अधिक जानकारी: https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIControl_Class/Reference/Reference.html#//apple_ref/occ/instm/UIControl/addTarget:action:forControlEvents: –

4

स्विफ्ट 3 में:

@IBAction func sliderValueChanged(_ slider: UISlider, _ event: UIEvent) { 
    guard let touch = event.allTouches?.first, touch.phase != .ended else { 
     // ended 
     return 
    } 
    // not ended yet 
} 
संबंधित मुद्दे