2010-11-29 9 views
19

से UIView की सीमाओं के बाहर खींचें मेरा प्रश्न इस Not drawing outside bounds when clipToBounds=NO से बहुत समान है जिसे कोई स्पष्ट उत्तर नहीं मिला।drawRect

मूल रूप से मेरे पास एक UIView है, और मैं स्क्रीन के किनारे पर इसके केंद्र से एक रेखा खींचना चाहता हूं। [self convertPoint:(CGPoint){0,0} fromView:[self superview]]; (जो मेरे दृश्य के पर्यवेक्षण के संबंध में मूल पाता है) का उपयोग करके यह पता लगाना आसान है। लेकिन जब मैं अपने दृश्य की रेखा से रेखा खींचता हूं: यह मेरे दृश्य की सीमाओं पर फिसल जाता है।

क्या कोई तरीका है मेरे दृश्य की सीमाओं के बाहर खींचें? मैंने क्लिप टूबाउंड संपत्ति को बदलने की कोशिश की है, लेकिन ऐसा कोई प्रभाव नहीं प्रतीत होता है।

मैं पर्यवेक्षण से अपनी लाइन नहीं खींच सकता क्योंकि मुझे इसे कई विचारों से करने की ज़रूरत है और कुछ दूसरों के सामने होंगे ... पर्यवेक्षण के ड्रॉरेक्ट से परत को समझना एक बुरा विचार जैसा लगता है।

इसी तरह, मुझे नहीं लगता कि मैं बस अपने दृश्य की सीमाओं को शामिल करने के लिए आकार बदल सकता हूं पूरी स्क्रीन, क्योंकि मेरे विचारों को गतिशील रूप से पुनः आकार देने की आवश्यकता है ... काम करने के लिए सीमाओं को विशाल (> 20,000 अंक वर्ग) होना होगा।

+0

रिकॉर्ड के लिए, मैं एक भाई के दृश्य के साथ गया, और यह सुनिश्चित करने के लिए कि वे भाई के दृश्य को भी स्थानांतरित करते हैं, फिर से ऑर्डर करने के लिए उपयोग की जाने वाली सभी विधियों को झुकाएं। इसने प्रदर्शन का तरीका बेहतर बना दिया, क्योंकि मेरे किसी भी विचार के लिए अधिकतम आकार स्क्रीन का आकार है। –

उत्तर

8

मैं कभी भी दृश्य की सीमाओं के बाहर ड्राइंग करने की अनुशंसा नहीं करता। या तो आपके ड्राइंग को शामिल करने के लिए आपके दृश्य को स्वचालित रूप से आकार बदलने की आवश्यकता है या आपको पारदर्शी ओवरलैपिंग दृश्यों की आवश्यकता है। अथवा दोनों। मैं ऐसी स्थिति के बारे में नहीं सोच सकता कि इनमें से कोई भी मामला कवर नहीं करेगा, लेकिन मुझे कल्पना की कमी हो सकती है। =)

वर्तमान में क्या हो रहा है यह संभावना है कि जब सुपर व्यू को फिर से खींचा जाता है तो यह सुपर व्यू को बताता है कि इसे फिर से खींचा जाना चाहिए, जिसके परिणामस्वरूप आप जो चित्र बाहर कर रहे हैं उसे मिटा दें। यह थोड़ी देर हो गया है, अगर मैं गलत हूं तो कोई और जानकार मुझे यहां सही कर सकता है (चाहिए!)

मुझे नहीं पता कि "क्वार्ट्ज डीबग" (मानक सेब डेवलपर टूल इंस्टॉल, /Developer/Applications/Performance Tools/Quartz Debug से) सिम्युलेटर में काम करता है, लेकिन यह एक कोशिश के लायक है। इसमें एक मोड है जो आपको दिखाएगा कि रीफ्रेश पर सीमा और वैकल्पिक देरी के साथ, कब और कितनी बार पुनर्विचार होता है।

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

इसके अतिरिक्त, यदि आपकी श्रेणियां इतनी गतिशील हैं तो आप स्क्रीन के प्रतिशत में चित्रों या सुपर-व्यू में ड्राइंग पर विचार करना चाहेंगे, इससे कोड को और अधिक समझ हो सकती है।

+0

सलाह के लिए धन्यवाद। एक अलग कोण से समस्या को देखने में मददगार था। मैं भाई के विचारों के साथ चला गया। –

+13

मेरे पास एक उपयोग-मामला है: मैं एक आयताकार बनाना चाहता हूं जो पूरी तरह से इसके पर्यवेक्षण की सीमाओं का आकार बदलता है; लेकिन मैं आयताकार के नीचे नीचे एक छोटा त्रिकोण जोड़ना चाहता हूं। इसे प्रभावी ढंग से करने के लिए, मुझे दृश्य की सीमाओं से थोड़ा त्रिकोण खींचना होगा। –