1

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

提前致谢!

4

0 回答 0