我想分发框架A.框架A依赖于框架B.我希望我的框架的用户只需要包含框架A,但仍然具有对框架B的编程访问权限.
Apple使用"Umbrella Frameworks"的概念一直这样做,但是文档中有这个主题:
不要创建伞框架
虽然可以使用Xcode创建伞形框架,但对大多数开发人员来说这样做是不必要的,不建议这样做.Apple使用伞形框架来掩盖操作系统中库之间的一些相互依赖关系.几乎在所有情况下,您都应该能够将代码包含在单个标准框架包中.或者,如果您的代码足够模块化,您可以创建多个框架,但在这种情况下,模块之间的依赖关系将是最小的或不存在的,并且不应该保证为它们创建保护伞.
为什么这种做法不鼓励?是什么使它成为Apple相互依赖框架问题的良好解决方案,而不是我的?
我想要的是采用填充矩形并使用其他形状在其中打孔.这正是为此NSBezierPath
而设计的那种东西.您添加一个矩形路径,然后添加将"穿"它的子路径,最后填充它.在我的例子中,子路径实际上是文本.没问题,效果很好:
除非我使用Helvetica Neue Bold作为我的字体.当我使用它时,我最终得到一个没有任何文字的纯蓝色矩形.但是子路径确实在绘制 - 实际上,如果我将填充的矩形缩小一点,您实际上可以看到一些文本路径:
我和Helvetica Neue Italic的行为相同.Helvetica Neue Medium的工作正常,Helvetica Bold,Times New Roman Bold和Arial Bold也是如此.
我已经尝试过使用NSEvenOddWindingRule
和NSNonZeroWindingRule
.(编辑:显然我并没有真正尝试过NSEvenOddWinding
规则,因为事实上这确实可以起作用)
这是我在drawRect
我的NSView
子类的方法中使用的代码.
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]; …
Run Code Online (Sandbox Code Playgroud) 我注意到在我的应用程序的OS X崩溃日志中,第一部分之一是"Application Specific Backtrace".它显示了这样的事情:
Application Specific Backtrace 1:
0 CoreFoundation 0x00007fff8acef716 __exceptionPreprocess + 198
1 libobjc.A.dylib 0x00007fff8d723470 objc_exception_throw + 43
2 CoreFoundation 0x00007fff8ad7df07 -[__NSDictionaryM setObject:forKey:] + 135
3 My App 0x00000001030c6f72 My App + 81778
4 My App 0x00000001030c7969 My App + 84329
5 AppKit 0x00007fff8c3d5afa -[NSIBObjectData nibInstantiateWithOwner:topLevelObjects:] + 1012
6 AppKit 0x00007fff8c5ec1d6 -[NSNib _instantiateNibWithExternalNameTable:] + 610
7 AppKit 0x00007fff8c5ebf43 -[NSNib instantiateNibWithOwner:topLevelObjects:] + 254
8 AppKit 0x00007fff8c5eb4f7 -[NSViewController loadView] + 184
9 AppKit 0x00007fff8c593349 -[NSViewController view] + 41
10 My …
Run Code Online (Sandbox Code Playgroud)