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