我几乎是 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 烦恼吗?虽然这部分只是我试图理解视图、层、控制器和界面生成器之间的关系......)
提前致谢!