Могу ли я добавить CATextLayer в IKImageView - PullRequest
1 голос
/ 18 января 2012

Я в значительной степени новичок в программировании на OS X. Я хотел добавить наложение текста в IKImageView, но мой текст не отображается.

В IB я начал с пользовательского NSView, который позже будет вставлен в окно. Затем я перетащил в него IKImageView, чтобы он занимал большую часть, но не все, вид. (Я планирую добавить другие элементы управления в представление позже)

Я прикрепил основной CustomView к одному контроллеру и подключил IKImageView к другому с именем myImageController. Затем внутри myImageController я импортирую Quartz, QuartzCore и AppKit и пытаюсь добавить текст ("FOO") через awakeFromNib:

- (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 для отображения в универсальном пользовательском представлении. *

Кроме того, когда я попытался сделать setNeedsDisplay для CATextLayer, компилятор указал, что CATextLayer может не знать, что это такое.

(Я не планирую использовать HUD для редактирования - стоит ли мне вообще беспокоиться о IKImageView? Хотя отчасти это всего лишь мои попытки понять взаимосвязь между представлениями, слоями, контроллерами и Интерфейсным Разработчиком ...) 1014 *

Заранее спасибо!

...