2015-12-02 3 views
1

Я пытаюсь сделать что-то действительно простое, но я не знаю, как это сделать с obj c. Я хочу написать строку «hello world» внутри CAShapeLayer, которую моя UIBezierPath использует как форму. не могли бы вы показать мне, как это делается с помощью кода? я просто хочу, чтобы написать эту строку в формеНапиши текст внутри UIBezierPath

у меня есть этот UIBezierPath вниз ниже:
UIBezierPath* oval2Path = [UIBezierPath bezierPathWithOvalInRect: oval2Rect];

внутри моей ViewController и не знаете, как добавить текст в него

ответ

0

Почему вы не делаете это в подклассе UIView? Вы можете сделать это нравится:

-(void)drawRect{ 
    UIBezierPath* oval2Path = [UIBezierPath bezierPathWithOvalInRect: self.bounds]; 
    [oval2Path addClip]; 
    [@"Hello World" drawInRect:self.bounds withAttributes:@{NSFontAttributeName: [UIFont systemFontOfSize:self.bounds.size.height]}]; 
} 
+0

Это просто маскирует текст с эллипсом. Я не верю, что он обернет текст в форму эллипса, если это то, что вы собираетесь делать. –

+0

@ ZevEisenberg вопрос довольно расплывчатый. Но обертывание двух слов, чтобы соответствовать форме, кажется, имеет меньшее значение, чем то, что я сделал. Вы знаете, что можно просто предоставить свой собственный ответ, не комментируя других, если вы считаете, что они неверны. – beyowulf

+0

Я стараюсь избегать использования drawRect –

0

Я нашел несколько учебников (1, 2), чтобы сделать это с основным текстом, но, похоже, вы также можете сделать это с UITextView и TextKit как ИО 7:

UIBezierPath *exclusionPath = ...; // some bezier path 
textView.textContainer.exclusionPaths = @[exclusionPath]; 

(TextKit раствор списаны из this tutorial.)

+0

Вы могли бы предоставить полный пример, пожалуйста –

0

Здесь я создаю некоторый круг, используя путь Безье и текст также

for (int i = 0; i < numberOfArcs.count; i++) { 
    NSInteger startAngele = i * 360/numberOfArcs.count+270; 
    NSInteger endAngele; 
    UIBezierPath *bezierPath = [UIBezierPath bezierPath]; 

     [bezierPath addArcWithCenter:CGPointMake(self.bounds.size.width/2.0, self.bounds.size.width/2.0) radius:0.25 * self.bounds.size.width startAngle:degreesToRadians(startAngele) endAngle:degreesToRadians(endAngele) clockwise:YES]; 
    } 

вы пишете текст на пути Безье с помощью CAShapelayer и CATextlayer использовать этот код

  CAShapeLayer *progressLayer = [[CAShapeLayer alloc] init]; 
     [progressLayer setPath:bezierPath.CGPath]; 


     CATextLayer* text = [CATextLayer new]; 
     for (int i = 1; i <= numberOfArcs.count; i++) { 
     text.string = [NSString stringWithFormat:@"%i", i]; 
     text.font = (__bridge CFTypeRef _Nullable)([UIFont fontWithName:@"akaChen" size:42]); 
     text.font = (__bridge CFTypeRef _Nullable)([UIFont boldSystemFontOfSize:15]); 
     text.fontSize=25; 
     text.frame = CGRectMake(0,0,40,40); 
     text.position = CGPointMake(CGRectGetMidX(progressLayer.frame) ,CGRectGetMidY(progressLayer.frame)); 

     CGFloat vert = CGRectGetMidY(progressLayer.frame)/CGRectGetHeight(text.frame); 

     text.anchorPoint = CGPointMake(0.5, vert); 
     text.alignmentMode = kCAAlignmentCenter; 
     text.foregroundColor = [[UIColor whiteColor] CGColor]; 

     [progressLayer addSublayer:text]; 
    } 
Смежные вопросы