2012-04-17 19 views
6

UIView पर एक साधारण सीमा डालना बहुत आसान है। आप बस, QuartzCore से लिंक यह आयात करते हैं, और का उपयोग करें:UIView पर ढाल सीमा कैसे सेट करें?

self.view.layer.borderColor = [UIColor redColor].CGColor; 
self.view.layer.borderWidth = 2.0f; 

मेरा प्रश्न है ... इस सीमा एक ढाल का उपयोग करने के लिए एक रास्ता है। मुझे पता है कि पूरे दृश्य में ढाल मास्क कैसे लागू करें, न केवल इसकी सीमा तक। मुझे लगता है कि इसमें कस्टम दृश्य और CoreGraphicsdrawRect: के अंदर ड्राइंग शामिल हो सकता है, लेकिन मुझे यकीन नहीं है कि कहां से शुरू करना है।

उत्तर

5

मुझे पूरी तरह से "ढाल" से आपका क्या मतलब है, इस बारे में पूरी तरह से यकीन नहीं है। चूंकि आपने कहा है कि आपने एक आकृति के ढाल को लागू करने के लिए कोर ग्राफिक्स का उपयोग किया है, तो मुझे लगता है कि आप का मतलब है कि (और पिछले जवाब की छाया का जिक्र नहीं है)।

आप सीमा पर ढाल लागू नहीं कर सकते हैं। हालांकि, आप एक कस्टम आकार का उपयोग करके अपनी सीमा बना सकते हैं। ऐसा करने का सबसे आसान तरीका दो पथ, बाहरी पथ और आंतरिक पथ बनाना है। सादगी के लिए, मान लेते हैं कि पथ एक सरल रेक्ट (रेक्ट drawRect में दी गई है) करते हैं:

UIBezierPath *path = [UIBezierPath bezierPathWithRect:rect]; 

दूसरा रास्ता एक आंतरिक पथ पहले एक (पर्याप्त एक सीमा बनाने के लिए) की तुलना में छोटे होने जा रहा है :

//To create a 1.0f borderWidth 
CGRect innerRect = rect; 
innerRect.origin.x += 1.0f; 
innerRect.origin.y += 1.0f; 
innerRect.size.width -= 2.0f; 
innerRect.size.height -= 2.0f; 
UIBezierPath *innerPath = [UIBezierPath bezierPathWithRect:innerRect]; 

अब, सामान्य पथ के लिए आंतरिक पथ संलग्न करें और सुनिश्चित करें कि पथ evenOddFillRule का उपयोग करता है बनाते हैं। यहां तक ​​कि ऑडफिलरूल कोर ग्राफिक्स को केवल बाहरी हिस्से को भरने के लिए बताएगा, जिससे आंतरिक भाग अकेला छोड़ दिया जाएगा। ओह, और आप रास्ते पर क्लिप चाहता हूँ:

[path appendPath:innerPath]; 
path.usesEvenOddFillRule = YES; 
[path addClip]; 

अगर आप इस आकार के लिए एक ढाल लागू होते हैं, यह आंतरिक पथ के बाहर और बाहरी पथ के अंदर भरने, एक ढाल के साथ एक सीमा हो जाएगी।

अद्यतन

आपके पास iOS 5.0 लक्षित कर रहे हैं यह करने के लिए बेहतर तरीका हो सकता है। मैंने CGPathCreateCopyByStrokingPath() नामक एक उल्लेखनीय नए पथ समारोह की खोज की। विवरण के लिए लिंक देखें, लेकिन मूल रूप से यह एक नया पथ बनाता है जो मूल के स्टोक (ओं) है, ताकि यदि आप नया पथ भरें, तो यह वही छवि बना देगा जो पुराने पथ को पथपाकर करता है। यह शानदार है क्योंकि नए पथ को भरने के बजाय, आप इसे क्लिप कर सकते हैं और फिर ग्रेडियेंट से भर सकते हैं, जिससे आपको ढाल सीमा मिलती है। मैंने पिछले विधि की तुलना में यह बहुत आसान है, लेकिन निश्चित रूप से, यह केवल आईओएस 5.0 में उपलब्ध है। यह नए जटिल आकार बनाने के लिए भी अधिक आसान बना देगा।

+0

धन्यवाद। पूर्ण कार्यान्वयन https://gist.github.com/2423583 पर पाया जा सकता है। ध्यान दें कि यह एक आंतरिक सीमा खींचता है, जो अन्य विचारों के शीर्ष पर बैठे समस्याग्रस्त हो सकते हैं। – shawnwall

+0

@Shawnwall मैंने अपना जवाब अपडेट कर दिया है। यदि आप आईओएस 5.0 का उपयोग कर रहे हैं तो ढाल सीमाओं को बनाने का एक आसान तरीका है। –

0

मैंने सरणी में उल्लिखित रंगों के साथ एक दूसरी ढाल परत बनाई, और फिर दूसरी परत के फ्रेम को पहली परत से थोड़ा छोटा बना दिया। एक सीमा की उपस्थिति बनाता है।

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