2012-09-23 33 views
17

मैंने ओएस एक्स के लिए कुछ बिंदुओं से सोचा, और हमेशा आईओएस के लिए सच है, यह सामग्री दृश्य की सीमाओं के बाहर दिखाई दे सकती है? (UIView के लिए) लेकिन अगर मैं एक नया एकल देखें एप्लिकेशन बनाते हैं, और एक MyView वर्ग कि UIView उपवर्गों बनाया है, और लागू अपने drawRect:आईओएस पर, drawRect दृश्य की सीमाओं के बाहर नहीं खींच सकता है?

- (void)drawRect:(CGRect)rect 
{ 
    // Drawing code 
    UIBezierPath *path = [UIBezierPath bezierPathWithRect: 
              CGRectMake(-20, -20, 600, 600)]; 
    [[UIColor greenColor] set]; 
    [path fill]; 

    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextSetFillColorWithColor(context, [[UIColor blueColor] CGColor]); 
    CGContextFillRect(context, CGRectMake(-20, -20, 600, 600)); 
} 

मैं दोनों यूआई और तटरक्षक का उपयोग प्रत्येक एक आयत आकर्षित करने के लिए, बस में मामला एक काम करता है और दूसरा नहीं करता है। और देखने viewDidAppear में जोड़ा जाता है:

- (void)viewDidAppear:(BOOL)animated { 
    MyView *myView = [[MyView alloc] initWithFrame:CGRectMake(20, 20, 260, 260)]; 
    [self.view addSubview:myView]; 
} 

लेकिन कोई फर्क नहीं पड़ता रंगीन बॉक्स (20, 20, 260, 260) क्षेत्र से परे जाना नहीं होगा क्या,। क्या यह सच है कि केवल कैलियर को स्वतंत्र रूप से जोड़ा जा सकता है और दृश्य की सीमा के बाहर दिखाई दे सकता है? क्या ग्राफिक्स संदर्भ के कारण यह (20, 20, 260, 260) तक शुरू हो सकता है? यदि हां, तो क्या सभी चार शीर्ष, नीचे, बाएं, दाएं दिशाओं में, drawRect सामग्री दृश्य के बाउंड के बाहर दिखाई देने का कोई तरीका है?

+0

क्या मैं पूछ सकता हूं, आप दृश्यमान रेक्ट के बाहर क्यों आकर्षित करना चाहते हैं, क्योंकि यह दिखाई नहीं देगा? यदि आप इसे बाद में दृश्यमान बनाने की योजना बना रहे हैं, तो आपको एक कैलियर का उपयोग करना चाहिए जैसा आपने सही ढंग से उल्लेख किया है। – Lefteris

+0

एक कारण यह है कि, मैं पॉपआउटस्क्रोल व्यू को लागू करने के बारे में सोच रहा हूं जिसमें गोल कोनों, या यहां तक ​​कि "किनारों की तरह बादल" भी है। मैंने पाया कि मैं UIView को उपclass कर सकता हूं और एक UIScrollView को एक संपत्ति के रूप में देख सकता हूं, ताकि स्क्रॉलव्यू दृश्य का एक सबव्यूव्यू हो, और मुझे वास्तव में 'self.scrollView' में जोड़ने के लिए' addSubview' को ओवरराइड करना होगा। ऐसा इसलिए है क्योंकि मैं स्क्रॉल व्यू पर सीमाओं को आसानी से नहीं खींच सकता, अन्यथा वे दूर स्क्रॉल करेंगे। यह जटिल हो सकता है, और मैंने सोचा, क्यों न केवल UIScrollView subclass, और drawRect में, सीमाओं के बाहर खींचें? तो मुझे इतनी सारी विधियों को ओवरराइड करने की ज़रूरत नहीं है। –

+0

हालांकि मैंने यह कोशिश नहीं की है, लेकिन मुझे इसके लिए कोई कारण नहीं दिख रहा है, स्क्रॉलव्यू में गोलाकार कोनों को जोड़कर, scrollview.layer.cornerRadius प्रॉपर्टी के माध्यम से आपके लिए यह आसान करना चाहिए। यदि आप स्क्रॉल व्यू को संशोधित करने की योजना बना रहे हैं, तो आपको स्क्रॉलव्यू को उप-वर्ग करना चाहिए और यह UIView – Lefteris

उत्तर

0

एक दृश्य है, जहां आप scrollview को शामिल किया है पर इस प्रयास करें:

self.scrollView.backgroundColor = [UIColor darkGrayColor]; 
self.scrollView.layer.cornerRadius = 10.0f; 
self.scrollView.layer.masksToBounds = YES; 

यह गोलाकार कोनों के साथ एक ग्रे scrollview प्रदर्शित करना चाहिए के रूप में आप चाहते हैं।

आप दृश्य अपने आप में ड्राइंग करने का QuartzCore ढांचे

+0

क्या होगा यदि इसे सीमाओं से बाहर जाने की आवश्यकता है? –

+0

मुझे प्रश्न नहीं है – Lefteris

+0

मेरा मतलब है, उपर्युक्त कोड दृश्य की सीमाओं के भीतर पृष्ठभूमि को आकर्षित करेगा। क्या होगा यदि हमें शीर्ष से ऊपर 10 पिक्सल, बाएं हाशिए के बाईं ओर 10 पिक्सल खींचने की आवश्यकता है, (कुछ खींचें, या इस मामले में पृष्ठभूमि और गोल कोनों को आकर्षित करना है) –

20

आपका समस्या यह है कि "drawRect" स्वचालित रूप से मानना ​​है कि आप में बना रहे हैं करने के लिए काटा जाता है।

आयात करने के लिए इसके बजाय जरूरत याद रखें , पहले दृश्य में एक दूसरा (उप) दृश्य जोड़ें, जो पहले दृश्य की सीमाओं के बाहर है। यह आपको ड्राइंग करने की अनुमति देगा जो पहले दृश्य की नियुक्ति पर निर्भर है, लेकिन पहले दृश्य की सीमाओं के बाहर है।

उम्मीद है कि इससे मदद मिलती है।