Как я могу нарисовать NSString (используя drawInRect) перед слоем, а не позади? - PullRequest
3 голосов
/ 19 октября 2011

В моем представлении initWithFrame я создаю корневой слой, а затем добавляю к нему подслой. Я установил путь подслоя, чтобы он нарисовал цветную рамку. Я хочу, чтобы текст отображался в верхней части окна, поэтому в моем представлении drawRect я использую метод NSString drawInRect для отображения текста, но он всегда рисуется за рамкой.

Есть ли способ изменить глубину, чтобы каким-то образом нарисовать текст перед слоем с цветными квадратами?

изображение: http://i.imgur.com/zins6.png

с низкой непрозрачностью на подслое: http://i.imgur.com/qyJLU.png

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];

    if (self)
    {
        rootLayer = [CALayer layer];
        rootLayer.frame = self.frame;
        [self.layer addSublayer:rootLayer];

        sublayerPath = CGPathCreateMutable();
        CGPathAddRect(sublayerPath, nil, sublayerRect);
        CGPathCloseSubpath(sublayerPath);

        sublayer = [CAShapeLayer layer];
        sublayer.path = sublayerPath;
        sublayer.fillColor = [[UIColor greenColor] CGColor];
        sublayer.strokeColor = [[UIColor blackColor] CGColor];
        [rootLayer addSublayer:sublayer];

        ...
    }
    return self;
}


- (void)drawRect:(CGRect)rect
{

    ...

    [myString drawInRect:sublayerRect withFont:[UIFont fontWithName:@"Helvetica-Bold" size:21] lineBreakMode:UILineBreakModeTailTruncation alignment:UITextAlignmentCenter];    
}

Я уже пытался добавить CATextLayer вместо этого подслоя - он работает, но медленнее (каждое из представлений находится в UITableViewCell, и он прокручивается намного плавнее, используя метод drawInRect NSString).

Так кто-нибудь знает, как я могу нарисовать строку поверх подслоя? Я попытался установить z-положение подслоя ниже без эффекта. Я не уверен, как изменить глубину графического контекста drawRect или, если это возможно.

...