2011-04-19 16 views
9

मेरे पास NSBezierPath है जो एक गोलाकार आयताकार बनाता है लेकिन इसके कोनों को चंचल लग रहा है और चमकदार दिखाई देता है कि बाकी स्ट्रोक को पूर्ण पैमाने पर देखा जाता है। मेरे कोड है:NSBezierPath गोलाकार आयताकार खराब कोनों में

NSBezierPath *path = [NSBezierPath bezierPath]; 
    [path appendBezierPathWithRoundedRect:NSMakeRect(0, 0, [self bounds].size.width, [self bounds].size.height) xRadius:5 yRadius:5]; 

    NSGradient *fill = [[NSGradient alloc] initWithColorsAndLocations:[NSColor colorWithCalibratedRed:0.247 green:0.251 blue:0.267 alpha:0.6],0.0,[NSColor colorWithCalibratedRed:0.227 green:0.227 blue:0.239 alpha:0.6],0.5,[NSColor colorWithCalibratedRed:0.180 green:0.188 blue:0.196 alpha:0.6],0.5,[NSColor colorWithCalibratedRed:0.137 green:0.137 blue:0.157 alpha:0.6],1.0, nil]; 
    [fill drawInBezierPath:path angle:-90.0]; 

    [[NSColor lightGrayColor] set]; 
    [path stroke]; 

यहाँ कोनों (एक छोटी सी तस्वीर में इसका रूप में स्पष्ट नहीं) के 2 की एक तस्वीर:

corners

किसी को भी पता है कि यह क्या पैदा कर रहा है? क्या मैं बस कुछ याद कर रहा हूँ?

किसी भी मदद

उत्तर

18

राउंडराइट की सीधी रेखाएं बिल्कुल दृश्य की सीमाओं पर हैं, इसलिए प्रत्येक पंक्ति की आधा चौड़ाई काटा जा रहा है। (के रूप में यदि वे एक उपपिक्सेल पर थे।)

NSMakeRect(0.5, 0.5, [self bounds].size.width - 1, [self bounds].size.height - 1) 

को

NSMakeRect(0, 0, [self bounds].size.width, [self bounds].size.height) 

को बदलने में कोई NSBezierPath कभी थोड़ा अजीब या धुँधली लग रहा है, आधे से एक पिक्सेल पर स्थानांतरण की कोशिश की कोशिश करो।

+0

जादू की तरह काम किया! बहुत बहुत धन्यवाद। – nosedive25

+2

इसे आधा पिक्सेल से स्थानांतरित करने के बजाय, आमतौर पर पथ की स्ट्रोक चौड़ाई के आधे से चित्र को इन्सेट करना बेहतर होता है, जो वास्तव में कोड है जो वास्तव में यहां होता है। –

+6

छोटा रास्ता: NSInsetRect (self.bounds, 0.5, 0.5) – sergeyne

0

के लिए धन्यवाद NSBezierPath डॉक्स में setFlatness: विधि पर एक नजर डालें। यह नियंत्रित करता है कि कितने चिकनी rendered वक्र हैं। मेरा मानना ​​है कि इसे एक छोटी संख्या में सेट करना (डिफ़ॉल्ट होना .6) अधिक गणना की लागत पर चिकनी वक्र उत्पन्न करेगा (हालांकि सरल पथों के लिए, मुझे संदेह है कि यह एक बहुत कुछ मायने रखता है)।

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