CAShapeLayer: определить форму: добавить CATextLayer в этой форме

У меня есть файл SVG, и я смог получить доступ к формам SVG, используя SVGKit,

Теперь у меня есть CAShapeLayer который может содержать круг, квадрат или любую замкнутую форму.

я хочу добавить CATextLayer на CAShapeLayer таким образом, что текст не должен пересекать определенную форму.

Вот пример скрещивания CATextLayer на CAShapeLayer:

Это пересекается только потому, что CATextLayer начинается с 0 позиции CAShapeLayer который содержит круг в данном случае.

В моем случае, CAShapeLayer может содержать любую замкнутую форму. Это может быть также овальным.

Как я могу определить форму внутри CAShapeLayer? или Как я могу применить путь к CATextLayer? что будет гарантировать, что текст будет нарисован внутри формы?

Вот код, чтобы добавить CATextLayer На CAShapeLayer:

-(CATextLayer *)addTrackerNumberToLayer:(NSString *)numbers{
    self.numbersTextLayer = [CATextLayer new];
    self.numbersTextLayer.foregroundColor = [UIColor blackColor].CGColor;
    self.numbersTextLayer.font = (__bridge CFTypeRef _Nullable)([UIFont boldSystemFontOfSize:15]);
    self.numbersTextLayer.fontSize=25;
    self.numbersTextLayer.anchorPoint = CGPointZero;
    self.numbersTextLayer.frame = CGRectMake(self.parentShapeLayer.bounds.size.width*0.05, self.parentShapeLayer.bounds.size.height*0.05, self.parentShapeLayer.bounds.size.width*0.90, self.parentShapeLayer.bounds.size.height*0.30);
    self.numbersTextLayer.position = CGPointMake(self.parentShapeLayer.bounds.size.width*0.05,self.parentShapeLayer.bounds.size.height*0.05);
    self.numbersTextLayer.alignmentMode = kCAAlignmentCenter;

    [self.parentShapeLayer addSublayer:self.numbersTextLayer];
}

1 ответ

Использование isWrapped собственностью CATextLayer это определяет, будет ли текст перенесен, чтобы уместиться в пределах границ получателя.

-(CATextLayer *)addTrackerNumberToLayer:(NSString *)numbers{
    self.numbersTextLayer = [CATextLayer new];
    self.numbersTextLayer.foregroundColor = [UIColor blackColor].CGColor;
    self.numbersTextLayer.font = (__bridge CFTypeRef _Nullable)([UIFont boldSystemFontOfSize:15]);
    self.numbersTextLayer.fontSize=25;
    self.numbersTextLayer.anchorPoint = CGPointZero;
    self.numbersTextLayer.frame = CGRectMake(self.parentShapeLayer.bounds.size.width*0.05, self.parentShapeLayer.bounds.size.height*0.05, self.parentShapeLayer.bounds.size.width*0.90, self.parentShapeLayer.bounds.size.height*0.30);
    self.numbersTextLayer.position = CGPointMake(self.parentShapeLayer.bounds.size.width*0.05,self.parentShapeLayer.bounds.size.height*0.05);
    self.numbersTextLayer.alignmentMode = kCAAlignmentCenter;
    [self.numbersTextLayer setWrapped:YES];//User Wrapped to YES to imbound the text to fit in the region.
    [self.parentShapeLayer setMasksToBounds:YES];
    [self.parentShapeLayer addSublayer:self.numbersTextLayer];
    return self.numbersTextLayer;
}
Другие вопросы по тегам