2012-04-06 10 views
14

मैंने कस्टम UIPopoverBackgroundView क्लास बनाने के लिए यह अच्छा tutorial उपयोग किया है।कस्टम यूआईपीओपॉवरबैकग्राउंड व्यू: कोई ड्रॉप छाया

यह अच्छी तरह से काम करता है। एकमात्र समस्या यह है कि मुझे सामान्य UIPopoverController ड्रॉप छाया नहीं मिल रही है और मुझे यह चाहिए। मैंने सफलता के बिना अपने UIPopoverBackgroundView इंस्टेंस की परत पर इसे निर्दिष्ट करने का प्रयास किया है। UIPopoverController का मेरा उदाहरण हस्तक्षेप करने के लिए सार्वजनिक दृश्य प्रतीत नहीं होता है। इसे पॉपओवर सामग्री में जोड़ना भी काम नहीं करता है।

शायद वास्तव में सरल: कस्टम UIPopoverBackgroundView क्लास का उपयोग करते समय मैं ड्रॉप ड्रॉप कैसे जोड़ूं?

// UIPopoverBackgroundView.m

-(id)initWithFrame:(CGRect)frame{ 
    if (self = [super initWithFrame:frame]) { 
     _borderImageView = [[UIImageView alloc] initWithImage:[[UIImage imageNamed:@"bg-popover.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(CAP_INSET,CAP_INSET,CAP_INSET,CAP_INSET)]]; 

     _arrowView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"bg-popover-arrow.png"]]; 

     [self addSubview:_borderImageView]; 
     [self addSubview:_arrowView]; 

     self.layer.shadowOffset = CGSizeMake(50, 50); 
     self.layer.shadowColor = [[UIColor blackColor] CGColor]; 
    } 

    return self; 
} 

उत्तर

14

ठीक है, यह पता लगा। मुझे पॉपओवर इंस्टेंस के दृश्य को नहीं, borderImageView पर ड्रॉप छाया जोड़ने की आवश्यकता थी।

- (id)initWithFrame:(CGRect)frame 
{ 
    if (self = [super initWithFrame:frame]) { 
     _borderImageView = [[UIImageView alloc] initWithImage:[[UIImage imageNamed:@"bg-popover.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(CAP_INSET,CAP_INSET,CAP_INSET,CAP_INSET)]]; 

     _arrowView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"bg-popover-arrow.png"]]; 

     [self addSubview:_borderImageView]; 
     [self addSubview:_arrowView]; 

     _borderImageView.layer.cornerRadius = 5.0f; 
     _borderImageView.layer.masksToBounds = NO; 
     _borderImageView.layer.borderWidth = 1.0f; 
     _borderImageView.layer.borderColor = [UIColor blackColor].CGColor; 

     _borderImageView.layer.shadowColor = [UIColor blackColor].CGColor; 
     _borderImageView.layer.shadowOpacity = 0.8; 
     _borderImageView.layer.shadowRadius = 50; 
     _borderImageView.layer.shadowOffset = CGSizeMake(-10.0f, 10.0f); 
    } 

    return self; 
} 
+0

आप इस के लिए बहुत बहुत धन्यवाद को लक्षित आईओएस 6 एप्लिकेशन पर लागू होता है! –

+1

बस सोचा कि मैं जोड़ूंगा कि यह मेरे लिए काम करता है, लेकिन मेरे पास प्रदर्शन के मुद्दे थे। पृष्ठभूमि परत को रास्टराइज करने में अत्यधिक मदद मिली: 'backgroundImageView.layer.shouldRasterize = हाँ;' – Maurizio

+0

दिलचस्प - मैंने कोई महत्वपूर्ण अंतराल नहीं देखा (आईपैड 2 पर) लेकिन जानना अच्छा है। –

19

आपको अपनी खुद की छाया जोड़ने की आवश्यकता नहीं है। आधार UIPopoverBackgroundView आपके लिए यह करेगा। बस अपने layoutSubviews कार्यान्वयन में सुपर कॉल करना सुनिश्चित करें।

संपादित करें: मेरे टिप्पणी

+0

+1 सच है। मैं आश्चर्यचकित होने के बाद यहां आया कि मेरे कस्टम पॉपओवर ने इसे आईओएस 6 – Mazyod

+0

पर चलाने के बाद छाया छोड़ना शुरू कर दिया है @ आईओएस 6 अपडेट जोड़ने के लिए धन्यवाद - मैं आपकी टिप्पणी देखने के बाद आईओएस 5 के तहत जांचने के लिए वापस गया था और 'लेआउटस्यूव्यूव्स' पर सुपर कॉल नहीं किया था परछाई। –

+0

मैं आईओएस 6 में हूं और मेरा यूआईपीओपॉवरबैकग्राउंड व्यू छाया नहीं दिखा रहा है :( –

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