2011-11-12 22 views
31

मेरे पास एक UIButton है जहां मैं छवि के नीचे पृष्ठभूमि (पारदर्शी पृष्ठभूमि के साथ प्रतीक) के रूप में ढाल करना चाहता हूं, लेकिन मुझे दो अलग-अलग समस्याएं आ रही हैं।GradientLayer के साथ UIButton छवि को अस्पष्ट करता है और अंधेरे ढाल

कैग्राइडेंट लेयर का पहला चित्र छवि के शीर्ष पर ओवरले लग रहा है इससे कोई फर्क नहीं पड़ता कि मैं इसे जोड़ने की कोशिश करता हूं, छवि को पूरी तरह से अस्पष्ट करता हूं।

दूसरा, ढाल को बहुत ही अंधेरा लगता है, जैसे बटन अक्षम किया गया था, जो यह नहीं है। ढाल जोड़ने के बाद:

self.backButton = [[UIButton alloc] initWithFrame:CGRectMake(15, 35, 28, 28)]; 
[backButton addTarget:self 
       action:@selector(goBack) 
    forControlEvents:UIControlEventTouchUpInside]; 
[backButton setBackgroundColor:[UIColor clearColor]]; 
CAGradientLayer *buttonGradient = [CAGradientLayer layer]; 
buttonGradient.frame = backButton.bounds; 
buttonGradient.colors = [NSArray arrayWithObjects: 
         (id)[[UIColor colorWithRed:.0 
               green:.166 
               blue:.255 
               alpha:1] CGColor], 
         (id)[[UIColor colorWithRed:.0 
               green:.113 
               blue:.255 
               alpha:1] CGColor], 
         nil]; 
[buttonGradient setCornerRadius:backButton.frame.size.width/2]; 
[backButton.layer insertSublayer:buttonGradient 
         atIndex:0]; 
[backButton setImage:[UIImage imageNamed:@"backarrow.png"] 
      forState:UIControlStateNormal]; 
[backButton setEnabled:NO]; 
[topbarView addSubview:backButton]; 

उत्तर

61

तो मैं एक [button.imageView बटन bringSubviewToFront] कार्य करके यह चारों ओर पाने में कामयाब रहे:

यहाँ मेरी कोड है। ऐसा लगता है कि कोई फर्क नहीं पड़ता कि मैं नई परत क्या करता हूं, छवि दृश्य के शीर्ष पर जोड़ देगा, इसलिए मुझे इसे बाद में आगे बढ़ाना होगा।

+0

अच्छा समाधान है, धन्यवाद –

+0

बिल्कुल सही, धन्यवाद – avdyushin

21

वैकल्पिक रूप से, आप छवि को देखने की परत नीचे ढाल परत सम्मिलित कर सकते हैं

CAGradientLayer* gradient = [CAGradientLayer layer]; 
// ... 
[button.layer insertSublayer:gradient below:button.imageView.layer]; 
+0

तुम सचमुच बस मेरी जिंदगी बचाई! ;) छवि को ढाल के साथ परत जोड़ने के बाद दिखाया नहीं गया था क्योंकि परत निश्चित रूप से - छवि परत के ऊपर थी। धन्यवाद – virusss8

1

स्विफ्ट 3

यहाँ एक उदाहरण है: (नील जवाब के आधार पर)

let layer = CAGradientLayer() 
    layer.frame = CGRect(x: 0, y: 0, width: myButtonOutlet.layer.frame.size.width, height: myButtonOutlet..layer.frame.size.height) 
    layer.colors = [UIColor.white.cgColor, pixelColorReceta.cgColor] 
    layer.masksToBounds = true 
    layer.cornerRadius = myButtonOutlet.layer.cornerRadius 
    myButtonOutlet.layer.insertSublayer(layer, below: myButtonOutlet..imageView?.layer) 

हैप्पी कोडिंग :)

0

स्विफ्ट 3

आप ढाल ऊपर छवि स्थानांतरित कर सकते हैं:

contactButton.imageView?.layer.zPosition = 1 

या छवि के नीचे ढाल सम्मिलित करें:

button.layer.insertSublayer(gradientLayer, below: button.imageView?.layer)