मैं जो चाहता हूं वह एक भरे आयत को लेना और दूसरे आकार का उपयोग करके इसमें एक छेद पंच करना है। यह बिल्कुल ऐसी चीज है जो NSBezierPath
के लिए डिज़ाइन की गई है। आप एक आयताकार पथ जोड़ते हैं, फिर उपपथ जोड़ें जो इसके माध्यम से "पंच" करेगा और अंत में इसे भर देगा। मेरे मामले में उपपथ वास्तव में पाठ है। जब मैं का उपयोग अपने फ़ॉन्ट के लिए Helvetica Neue बोल्ड छोड़करएनएसबीज़ियरपाथ में हेल्वैटिका नियू बोल्ड ग्लाइफ एक सामान्य उपपथ के रूप में क्यों नहीं खींचेगा?
: कोई बात नहीं, महान काम करता है। जब मैं इसका उपयोग करता हूं, तो मैं बिना किसी पाठ के ठोस नीले आयताकार के साथ समाप्त होता हूं। लेकिन सब-पाथ वास्तव में आ रहा है - वास्तव में, अगर मैं भरा आयत थोड़ा हटना, आप वास्तव में पाठ पथ के कुछ देख सकते हैं:
मैं Helvetica Neue इटैलिक के साथ समान व्यवहार मिलता है। हेल्वेटिका नियू माध्यम ठीक काम करता है, जैसा हेल्वेटिका बोल्ड, टाइम्स न्यू रोमन बोल्ड और एरियल बोल्ड करता है।
मैंने NSEvenOddWindingRule
और NSNonZeroWindingRule
दोनों का उपयोग करने का प्रयास किया है। (संपादित: जाहिर है मैं वास्तव में, NSEvenOddWinding
शासन की कोशिश नहीं की, क्योंकि वह बाहर बारी है सब के बाद काम करने के लिए)
इस कोड है कि मैं अपने NSView
उपवर्ग के drawRect
विधि के अंदर उपयोग कर रहा हूँ है।
NSLayoutManager *layoutManger = [[[NSLayoutManager alloc] init] autorelease];
NSTextContainer *textContainer = [[[NSTextContainer alloc]
initWithContainerSize:NSMakeSize(300, 100)] autorelease];
NSFont *font = [NSFont fontWithName:@"Helvetica Neue Bold" size:100];
NSDictionary *textAttribs = [NSDictionary dictionaryWithObjectsAndKeys:
font, NSFontAttributeName, nil];
NSTextStorage *textStorage = [[[NSTextStorage alloc] initWithString:@"Hello"
attributes:textAttribs] autorelease];
[layoutManger addTextContainer:textContainer];
[layoutManger setTextStorage:textStorage];
NSRange glyphRange = [layoutManger glyphRangeForTextContainer:textContainer];
NSGlyph glyphArray[glyphRange.length];
NSUInteger glyphCount = [layoutManger getGlyphs:glyphArray range:glyphRange];
NSBezierPath *path = [NSBezierPath bezierPathWithRect:NSMakeRect(0, 0, 200, 100)];
[path appendBezierPathWithGlyphs:glyphArray count:glyphCount inFont:font];
[[NSColor blueColor] setFill];
[path fill];
तो यहां क्या हो रहा है? जब पथ में ग्लिफ जोड़ने की बात आती है तो कुछ फ़ॉन्ट्स दूसरों की तुलना में अलग-अलग व्यवहार क्यों करते हैं?
EDIT: समाधान NSEvenOddWindingRule
का उपयोग करना है।
[path setWindingRule:NSEvenOddWindingRule];
पीटर Hosey का जवाब क्यों है का विवरण प्रदान करता है: path
के निर्माण के बाद इस लाइन को जोड़ने।
मुझे आश्चर्य है कि क्या हेल्वैटिका नियू एक अलग प्रकार का फ़ॉन्ट है। –