簡體   English   中英

CAShapeLayer:確定形狀:在該形狀中添加CATextLayer

[英]CAShapeLayer : Identify shape : Add CATextLayer in that shape

我有SVG文件,並且能夠使用SVGKit訪問SVG的形狀。

現在,我有了CAShapeLayer ,它可能包含圓形,正方形或任何閉合形狀。

我想補充CATextLayerCAShapeLayer以這樣的方式的文本不應該越過定義形狀。

這是在CATextLayer上穿越CATextLayerCAShapeLayer

在此處輸入圖片說明 在此處輸入圖片說明

它穿越只是因為, CATextLayer是從0位置開始CAShapeLayer其中特別包含這種情況下一圈。

就我而言, CAShapeLayer可以包含任何閉合形狀。 它也可以是橢圓形的。

如何識別CAShapeLayer內部的CAShapeLayer 或如何將路徑應用於CATextLayer 這樣可以確保將文本繪制在內部形狀中?

這是在CAShapeLayer上添加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.parentShapeLayer addSublayer:self.numbersTextLayer];
}

使用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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM