2012-03-28 9 views
15

मैंने खोज की है लेकिन इस व्यवहार के कारण को नहीं मिला।कैलियर सीमा उपरोक्त उपरोक्त दिखाई दे रही है (जेड-ऑर्डर से संबंधित, मुझे लगता है)

मेरे पास एक UIButton है जिसकी छवि मैं सेटिंग कर रहा हूं। यहां बताया गया है कि बटन कैसे दिखाना चाहिए। ध्यान दें कि यह सिर्फ इरादा बटन डिजाइन की एक फ़ोटोशॉप है:

enter image description here

मूलतः, यह एक सफेद सीमा और एक छोटे से आसपास के छाया के साथ एक वर्ग कस्टम UIButton है। ऊपरी दाएं कोने में, एक "एक्स" चिह्न है, जिसे एक सबव्यूव के रूप में प्रोग्रामेटिक रूप से जोड़ा जाएगा।

वास्तविक ऐप के भीतर बटन का स्क्रीनशॉट यहां दिया गया है। इस बिंदु पर, मैं केवल एक छाया और एक subview के रूप में एक्स मार्क जोड़ लिया है:

enter image description here

कैसे, जब मैं सफेद सीमा को जोड़ने का प्रयास है, यहाँ कि यह दिखता है:

enter image description here

ऐसा लगता है कि सफेद सीमा एक्स मार्क सब्लेयर के ऊपर दिखाई दे रही है। मुझे नहीं पता क्यों।

// selectedPhotoButton is the UIButton with UIImage set earlier 
// At this point, I am adding in the shadow 
[selectedPhotoButton layer] setShadowColor:[[UIColor lightGrayColor] CGColor]]; 
[[selectedPhotoButton layer] setShadowOffset: CGSizeMake(1.0f, 1.0f)]; 
[[selectedPhotoButton layer] setShadowRadius:0.5f]; 
[[selectedPhotoButton layer] setShadowOpacity:1.0f]; 

// Now add the white border  
[[selectedPhotoButton layer] setBorderColor:[[UIColor whiteColor] CGColor]]; 
[[selectedPhotoButton layer] setBorderWidth:2.0]; 

// Now add the X mark subview 
UIImage *deleteImage = [UIImage imageNamed:@"nocheck_photo.png"]; 
UIImageView *deleteMark = [[UIImageView alloc] initWithFrame:CGRectMake(53, -5, 27, 27)]; 
deleteMark.contentMode = UIViewContentModeScaleAspectFit; 
[deleteMark setImage:deleteImage]; 
[selectedPhotoButton addSubview:deleteMark]; 
[deleteMark release]; 

मुझे समझ नहीं आता क्यों सीमा deleteMark subview ऊपर दिखाई दे रहा है:

यहाँ कोड है कि मैं का उपयोग कर रहा है। क्या इरादा प्रभाव प्राप्त करने का कोई तरीका है?

धन्यवाद!

+0

सीमा निर्धारित करने के बजाय, इसे चित्रित करने का प्रयास करें! – tipycalFlow

+0

@tipycalFlow wtf क्यों? –

+0

@returntrue यह बहुत पुराना है लेकिन मुझे लगता है कि मैं ड्रॉ ऑर्डर – tipycalFlow

उत्तर

16

एप्पल डॉक्स से CALayer पर:

सीमा BorderWidth द्वारा रिसीवर के सीमा से इनसेट ली गई है। यह रिसीवर की सामग्री और sublayers के ऊपर composited है और कोनेराइडस संपत्ति के प्रभाव शामिल हैं।

क्रम प्रभाव आप चाहते हैं पाने के लिए, मैं आपको एक खुद subview/उप-परत में छवि रख दिया और कहा कि उप-परत के borderWidth गुण सेट सुझाव देते हैं।

+0

को नियंत्रित करने के लिए कह रहा था, मुझे खेद है कि यदि आप संभव हो तो कुछ छद्म कोड के साथ स्पष्टीकरण दे सकते हैं? छवि UIButton की छवि के रूप में सेट की जा रही है। क्या आप ऐसा करने से बचने का मतलब है? – kurisukun

+4

बस 'चयनित फोटो बटन' और 'डिलीटमार्क' के लिए सामान्य पर्यवेक्षण बनाएं, यानी 'हटाए गए फोटो बटन' के उपनाम के रूप में 'deleteMark'' को न जोड़ें, लेकिन उन्हें दोनों को नए 'UIView' में जोड़ें। – MrMage

2

मैं इसी तरह की समस्या थी

CAShapeLayer * _border = [CAShapeLayer layer]; 
_border.strokeColor = [UIColor colorWithRed:119/255.0f green:119/255.0f blue:119/255.0f alpha:1.0f].CGColor; 
_border.fillColor = nil; 
[bgRoundView.layer addSublayer:_border]; 
_border.path = [UIBezierPath bezierPathWithRoundedRect:bgRoundView.bounds cornerRadius:20.f].CGPath; 
3

आप -1 परत की zPosition सेट कर सकते हैं (मैं अपने subviews के शीर्ष पर होने की सीमा रेखा को रोकने के लिए करना चाहता था)। यह मेरे लिए काम किया।

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