2011-11-20 8 views
10

ऐप्पल आईओएस 5 में पेश की गई UIPopoverBackgroundView कक्षा का उपयोग करने के तरीके पर दस्तावेज़ खो रहा है। किसी के पास एक उदाहरण है?UIPopoverBackgroundView क्लास का उपयोग

मैं इसे उपवर्ग की कोशिश की है, लेकिन शेर पर मेरी XCode 4,2 UIPopoverBackgroundView.h

संपादित करें याद आ रही है: हैरानगी, यह आयात किया गया है चाहिए के रूप में #import <UIKit/UIPopoverBackgroundView.h>

+0

क्या आप वाकई दस्तावेज़ीकरण नहीं ढूंढ पाएंगे ?: http://developer.apple.com/library/IOs/#documentation/UIKit/Reference/UIPopoverBackgroundView_class/Reference/Reference.html – CodaFi

+0

शायद गलत एसडीके में देखना ? –

+1

#import :) – Cesar

उत्तर

13

अन्य, लिंक करने के लिए जोड़ने के लिए, केवल जवाब, यह है कि यह कैसे किया जाता है।

  • UIPopoverBackgroundView
  • का एक नया उपवर्ग
  • अपना इंटरफ़ेस में निम्नलिखित घोषित:

    +(UIEdgeInsets)contentViewInsets; 
    +(CGFloat)arrowHeight; 
    +(CGFloat)arrowBase; 
    
    @property(nonatomic,readwrite) CGFloat arrowOffset; 
    @property(nonatomic,readwrite) UIPopoverArrowDirection arrowDirection; 
    
  • वर्ग तरीकों स्पष्ट हैं: contentViewInsets आपकी सीमाओं की चौड़ाई सभी तरह दौर रिटर्न (नहीं तीर सहित), arrowHeight आपके तीर की ऊंचाई है, arrowBase आपके तीर का आधार है।

  • दो संपत्ति सेटर्स, लागू करें [self setNeedsLayout] पर कॉल करना सुनिश्चित करें।
  • अपनी प्रारंभिक विधि में, दो छवि दृश्य बनाएं, जो आपके तीर को पकड़ते हैं (जो आपकी कक्षा विधियों में तीर आयामों का आकार होना चाहिए) और आपकी पृष्ठभूमि छवि (जो एक आकार बदलने योग्य छवि हो) हो और इसे जोड़ें subviews। इससे कोई फर्क नहीं पड़ता कि आपने इस बिंदु पर सबव्यूव्स कहां रखा है, क्योंकि आपके पास तीर दिशा या ऑफसेट नहीं है। आपको यह सुनिश्चित करना चाहिए कि तीर छवि दृश्य पृष्ठभूमि छवि दृश्य से ऊपर है, इसलिए यह ठीक से मिश्रण करता है।
  • लागू layoutSubviews। यहां, arrowDirection और arrowOffset गुणों के अनुसार, आपको अपने पृष्ठभूमि दृश्य और तीर दृश्य के फ्रेम समायोजित करना होगा।
    • अपनी पृष्ठभूमि को देखने के फ्रेम self.bounds, पर जो कुछ भी बढ़त तीर
    • तीर देखने के फ्रेम पर है गठबंधन किया जाना चाहिए arrowHeight द्वारा इनसेट होना चाहिए ताकि केंद्र arrowOffsetself के केंद्र से दूर (सही है धुरी के अनुसार)। यदि तीर दिशा ऊपर नहीं है, तो आपको छवि अभिविन्यास बदलना होगा, लेकिन मेरा पॉपओवर केवल तभी होगा जब मैंने ऐसा नहीं किया।

यहाँ मेरी ऊपर केवल उपवर्ग के लिए layoutSubviews विधि है:

-(void)layoutSubviews 
{ 
    if (self.arrowDirection == UIPopoverArrowDirectionUp) 
    { 
     CGFloat height = [[self class] arrowHeight]; 
     CGFloat base = [[self class] arrowBase]; 

     self.background.frame = CGRectMake(0, height, self.frame.size.width, self.frame.size.height - height); 

     self.arrow.frame = CGRectMake(self.frame.size.width * 0.5 + self.arrowOffset - base * 0.5, 1.0, base, height); 
     [self bringSubviewToFront:self.arrow]; 

    } 
} 
0

एक और लिंक केवल का जवाब है, लेकिन अनुरूपण UIPopoverBackgroundView अधिक काम की तुलना में आप सीमित प्रलेखन उपलब्ध है और इस को देखते हुए पता है, गीथब प्रोजेक्ट में एक पूर्ण कामकाजी उदाहरण है जिसने मुझे बहुत समय बचाया: https://github.com/GiK/GIKPopoverBackgroundView

यह आपके स्वयं के प्रोजेक्ट में जाने के लिए काफी सरल है। सबसे तेज़ हिस्सा आप जो भी कस्टम छवियों का उपयोग कर रहे हैं, उनके लिए टोपी इन्सेट का अनुकूलन कर रहा है। मैं प्रोजेक्ट में अपनी अनुकूलन करने की अनुशंसा करता हूं और चूंकि सभी पॉपओवर अभिविन्यास/दिशा उपयोग मामलों को अपने स्वयं के प्रोजेक्ट में माइग्रेट करने से पहले सिम्युलेटर में सही तरीके से प्रदर्शित करना आसान है।

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