यह कोई स्ट्रोक ड्रॉ:
- (void)drawRect:(CGRect)rect
{
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetStrokeColorWithColor(context, [UIColor darkGrayColor].CGColor);
CGContextSetLineWidth(context, 14);
CGRect rrect = CGRectMake(CGRectGetMinX(rect), CGRectGetMinY(rect), CGRectGetWidth(rect), CGRectGetHeight(rect));
CGFloat radius = 30;
CGFloat minx = CGRectGetMinX(rrect), midx = CGRectGetMidX(rrect), maxx = CGRectGetMaxX(rrect);
CGFloat miny = CGRectGetMinY(rrect), midy = CGRectGetMidY(rrect), maxy = CGRectGetMaxY(rrect);
CGContextMoveToPoint(context, minx, midy);
CGContextAddArcToPoint(context, minx, miny, midx, miny, radius);
CGContextAddArcToPoint(context, maxx, miny, maxx, midy, radius);
CGContextAddArcToPoint(context, maxx, maxy, midx, maxy, radius);
CGContextAddArcToPoint(context, minx, maxy, minx, midy, radius);
CGContextClosePath(context);
CGContextClip(context);
CGContextDrawPath(context, kCGPathStroke);
}
संपादित करें: यह क्या (सही जवाब के अनुसार) में काम किया है:
- (void)drawRect:(CGRect)rect
{
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetStrokeColorWithColor(context, [UIColor darkGrayColor].CGColor);
CGContextSetFillColorWithColor(context, [UIColor blackColor].CGColor);
CGContextSetLineWidth(context, 14);
CGRect pathRect = CGRectMake(10, 10, rect.size.width -20, rect.size.height -20);
CGPathRef path = [UIBezierPath bezierPathWithRoundedRect:pathRect cornerRadius:20].CGPath;
CGContextAddPath(context, path);
CGContextClip(context);
CGContextAddPath(context, path);
CGContextDrawPath(context, kCGPathEOFillStroke);
}
धन्यवाद! क्या आप उपरोक्त मेरे "उत्तर" को देख सकते हैं और टिप्पणी कर सकते हैं। यह विधि काफी काम नहीं करती है। स्ट्रोक बिल्कुल नहीं खींचता है। पथ के लिए क्लिप क्या है, विधि का नाम? – Mrwolfy
आप करीब हैं। [ 'CGContextClip()' के लिए दस्तावेज़] (https://developer.apple.com/library/ios/documentation/graphicsimaging/reference/CGContext/Reference/reference.html#//apple_ref/c/func/CGContextClip) का कहना है : "नया क्लिपिंग पथ निर्धारित करने के बाद, फ़ंक्शन संदर्भ के वर्तमान पथ को खाली पथ पर रीसेट करता है।" यह बताता है कि क्यों 'CGContextDraw' कुछ भी नहीं खींचता है - आपको स्ट्रोक करने से पहले संदर्भ में पथ को फिर से जोड़ना होगा। –
एक [ 'CGPath'] (https://developer.apple.com/library/ios/#documentation/graphicsimaging/Reference/CGPath/Reference/reference.html#//apple_ref/c/tdef/CGPathRef) या [का उपयोग करना 'UIBezierPath'] (http://developer.apple.com/library/ios/#documentation/uikit/reference/UIBezierPath_class/Reference/Reference.html) उस प्रक्रिया को आसान बना देगा - आप एक बार पथ बना सकते हैं, फिर उपयोग करें यह दो बार –