0

我有SVG文件,并且能够使用SVGKit.

现在,我有CAShapeLayer可能包含圆形、方形或任何闭合形状。

我想以这样的方式添加CATextLayer文本CAShapeLayer不应该跨越定义的形状。

这是穿越的CATextLayer示例CAShapeLayer

在此处输入图像描述 在此处输入图像描述

它的交叉只是因为CATextLayer从 0 位置开始,CAShapeLayer其中包含圆,特别是在这种情况下。

就我而言,CAShapeLayer可以包含任何封闭的形状。它也可以是椭圆形的。

如何识别里面的形状CAShapeLayer?或如何应用路径CATextLayer?这将确保文本将绘制在形状内?

这是添加CATextLayerOn的代码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];
}
4

1 回答 1

0

Use isWrapped property of CATextLayer this determines whether the text is wrapped to fit within the receiver’s bounds.

-(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;
}
于 2018-02-27T11:23:45.813 回答