我几乎是OS X编程的新手。 我想在IKImageView中添加文本叠加层,但我的文字没有显示出来。
在IB中,我开始使用自定义NSView,稍后我将其嵌入到窗口中。 然后我将IKImageView拖入其中,以便占用视图的大部分,但不是全部。 (我打算稍后在视图中添加其他控件)
我将主CustomView附加到一个控制器,并将IKImageView附加到另一个名为myImageController的控件上。然后在myImageController中,导入Quartz,QuartzCore和AppKit并尝试通过awakeFromNib添加文本(“FOO”):
- (void) awakeFromNib {
[super awakeFromNib];
self.view.layer = [CALayer layer];
self.view.wantsLayer = YES;
NSLog(@"SVH - myImageController awakeFromNib self.frame %@",NSStringFromRect(self.view.frame));
NSLog(@"SVH - myImageController awakeFromNib self.bounds %@",NSStringFromRect(self.view.bounds));
self.view.layer.frame = self.view.bounds;
NSLog(@"SVH - myImageController awakeFromNib self.layer.frame %@",NSStringFromRect(self.view.layer.frame));
NSLog(@"SVH - myImageController awakeFromNib self.layer.bounds %@",NSStringFromRect(self.view.layer.bounds));
CATextLayer *overlayLayer = [CATextLayer layer];
overlayLayer.frame = self.view.layer.bounds;
[overlayLayer setFont:@"Helvetica"];
[overlayLayer setFontSize:30.0f];
[overlayLayer setShadowOpacity:.9f];
[overlayLayer setString:@"FOO"];
// TRY 1:
// [self.view.layer addSublayer:overlayLayer];
// TRY 2:
// [self setOverlay:overlayLayer forType:IKOverlayTypeImage];
// TRY 3:
[self.view setLayer:overlayLayer];
// Errored out when I tried this:
// [overlayLayer setNeedsDisplay:YES];
NSLog(@"SVH - myImageController - awakeFromNib done");
}
我尝试了3种不同的方式,但我不能让“FOO”显示出来。我希望它能在场景中显示出来(开始为空)。从调试器输出,看起来整个例程被执行。 (没有崩溃)
由于IKImageView是从NSView派生的,我希望能够对NSView做任何我能做的事情,并且我已经能够在通用自定义视图中显示2层CATextLayer。
此外,当我尝试对CATextLayer执行“setNeedsDisplay”时,编译器指示CATextLayer可能不知道它是什么。
(我不打算使用编辑HUD - 我是否应该为IKImageView烦恼?虽然这部分只是我试图理解视图,图层,控制器和界面生成器之间的关系......)< / p>
提前致谢!