2010-12-13 15 views
16


मूल रूप से मैं एक छवि बटन की जरूरत है, विशेष रूप से एक कस्टम उद्देश्य यह है कि उजागर:
1) जब
2) समाहित कस्टम डेटा
3 उपयोग किया एक नियंत्रक की कार्रवाई कॉल) स्वचालित रूप से आवरण दृश्य द्वारा ले जाया जाता है (नहीं प्रासंगिक)एक UIControl उपवर्ग

ठीक है, मैं UIControl का एक उपवर्ग के साथ यह सब मिल गया (UIButton उपवर्गीकरण के बाद से अनुशंसित नहीं है और उपवर्गीकरण UIImageView बिंदु 1) का प्रबंधन करने के लिए मुश्किल बना देता है। लेकिन अब इसे हाइलाइट करने का सही तरीका क्या है? मैं किसी भी तरह से टैप किए जाने पर नियंत्रण को हाइलाइट करना चाहता हूं (यहां तक ​​कि अल्फा की एक साधारण क्षणिक कमी)।

beginTrackingWithTouch और endTrackingWithTouch के साथ मैं केवल UIControlEventTouchUpInside ईवेंट को पहचान नहीं सकता।

नियंत्रक में एक दृश्य एनीमेशन? ऐसा लगता है कि मुझे एक मोटा समाधान

क्या कोई सरल और तत्काल समाधान है?

धन्यवाद :(

उत्तर

35

मुझे लगता है कि UIControls स्वचालित रूप से स्पर्श घटनाओं पर आधारित सही ढंग से उनके प्रकाश डाला गुण सेट, तुम क्या जरूरत है एक विशिष्ट एल्गोरिथ्म को लागू करने के -setHighlighted: विधि ओवरराइड करने के लिए है:।

- (void) setHighlighted: (BOOL) highlighted { 
    [super setHighlighted: highlighted]; 
    // Only as an example. Caution: looks like a disabled control 
    self.alpha = highlighted ? 0.5f : 1.0f; 
} 
+4

आप किसी भी subviews है, स्थापित करने के लिए mySubview.userInteractionEnabled = नहीं भूल नहीं है (अन्यथा नल पंजीकृत नहीं किया जाएगा और कोई हाइलाइट ट्रिगर किया जाएगा)। –

12

में इस उत्तर को अद्यतित रखने के हितों, यहां स्विफ्ट संस्करण (कॉस्टिक के उत्तर का) है।

override var highlighted: Bool { 
    didSet { 
     alpha = highlighted ? 0.6 : 1.0 // Sets alpha to 0.6 if highlighted, or 1.0 if it's not. 
    } 
} 

आप यूआईसींट्रोल की कमी को भी फीका कर सकते हैं। ऐसा करने के लिए, बस, एक एनीमेशन ब्लॉक में अल्फा काम जगह इस

override var highlighted: Bool { 
    didSet { 
     UIView.animateWithDuration(0.25) { _ in 
      self.alpha = self.highlighted ? 0.6 : 1.0 
     } 
    } 
} 
+0

मैंने पाया कि छूने के कारण छूने के कारण 'डीडसेट' का उपयोग करना। 'सेट (हाइलाइट किया गया) {' बेहतर काम किया - लेकिन केवल अगर मैंने सुपर कॉल नहीं किया था – Sam

0

तरह UIControl की subviews हाइलाइट करने के लिए ठीक से आप कस्टम रंग रंग का उपयोग कर सकते हैं। तो alpha मूल्य हम टिंट रंग बदल सकते हैं और यह अपने UIImageView subviews स्वचालित रूप से बदल जाएगा बदलने की बजाय

self.imageView.image = [self.imageView.image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; 
self.backgroundImageView.image = [self.backgroundImageView.image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; 
self.tintColor = [UIColor zst_blueColor]; // Use custom instead of system-defined color 

: init तरीकों में कहीं यह सक्षम करने के लिए, या awakeFromNib आप always template को रेंडरिंग मोड छवि बदलना चाहिए। setHighlighted: विधि में आप एक गहरे रंग के लिए पाठ और रंग रंग बदल सकते हैं:

- (void)setHighlighted:(BOOL)highlighted 
{ 
    [super setHighlighted:highlighted]; 
    UIColor *tintColor = highlighted ? [UIColor zst_darkerBlueColor] : [UIColor zst_blueColor]; 
    self.tintColor = tintColor; 
    self.titleLabel.textColor = tintColor; 
} 
संबंधित मुद्दे