Как добавить NSButton в CALayer?

Я пытаюсь добавить NSButton на слой внутри объекта IKImageBrowserCell. Я нашел этот пост полезным, но он не вникает в суть. Я уже пробовал это:

- (CALayer *) layerForType:(NSString*) type
{
    CGColorRef color;

    //retrieve some usefull rects
    NSRect frame = [self frame];
    NSRect imageFrame = [self imageFrame];
    NSRect relativeImageFrame = NSMakeRect(imageFrame.origin.x - frame.origin.x, imageFrame.origin.y - frame.origin.y, imageFrame.size.width, imageFrame.size.height);

    /* foreground layer */
    if(type == IKImageBrowserCellForegroundLayer){
        //no foreground layer on place holders
        if([self cellState] != IKImageStateReady)
            return nil;

        //create a foreground layer that will contain several childs layer
        CALayer *layer = [CALayer layer];
        layer.frame = CGRectMake(0, 0, frame.size.width, frame.size.height);


        //add a checkbox to tell whether to upload this one or not
        NSRect checkFrame  = NSMakeRect( ( frame.size.width/2)-5 , frame.size.height - 19, 18,18);
        NSButton *uploadCheckBox = [[NSButton alloc] initWithFrame:checkFrame];
        [uploadCheckBox setButtonType:NSSwitchButton];
        [layer addSublayer :[uploadCheckBox layer]];

        return layer;
    }
    //(...)
    return nil;
}

Но, к сожалению, кнопка не появляется на слое. Я думаю, что расположение кнопки хорошо, так как она основана на примере кода из приложения Apple. У меня есть ощущение, что эта строка не так:layer addSublayer :[uploadCheckBox layer]];, поскольку я должен добавить весь NSButton, а не только его растровое представление (слой). Любая помощь с благодарностью!

1 ответ

Вы не можете добавить NSView внутри CALayer. Вы должны создать новый слой для вашей кнопки и добавить в свой удерживающий слой.

Другие вопросы по тегам