3

图片:http: //i.stack.imgur.com/pbzar.png

我想获得 90-270 度的文本(文本“Aroma 7”到“Aroma 17”),旋转 180 度。

我的代码:

 for (int i=0; i<24; i++) {
    CGContextSaveGState(context);
    CGContextRef context = UIGraphicsGetCurrentContext();
    NSString *str = [NSString stringWithFormat:@"Aroma %d", i];

    CGContextTranslateCTM(context, radius, radius);
    CGContextRotateCTM(context, i * 15 * M_PI/180.0);
    [[UIColor whiteColor] set];

    CGContextTranslateCTM(context, - (radius), -(radius));

    CGSize size = [str sizeWithFont:[UIFont fontWithName:@"Helvetica" size:12.0]
                     constrainedToSize:rect.size
                         lineBreakMode:(NSLineBreakByWordWrapping)];

    [str drawAtPoint:CGPointMake(((radius * 2) - 10) - size.width, radius) withFont:[UIFont fontWithName:@"Helvetica" size:12.0]];


    CGContextRestoreGState(context);
}

谢谢您的帮助!

4

1 回答 1

5

这应该产生想要的输出:

for (int i=0; i<24; i++) {
    CGContextSaveGState(context);
    CGContextRef context = UIGraphicsGetCurrentContext();
    NSString *str = [NSString stringWithFormat:@"Aroma %d", i];

    CGContextTranslateCTM(context, radius, radius);
    CGContextRotateCTM(context, i * 15 * M_PI/180.0);
    [[UIColor whiteColor] set];
    CGSize size = [str sizeWithFont:[UIFont fontWithName:@"Helvetica" size:12.0]
                  constrainedToSize:rect.size
                      lineBreakMode:(NSLineBreakByWordWrapping)];

    CGContextTranslateCTM(context, radius-10-size.width/2, size.height/2); // (1)
    if (i >= 7 && i <= 17)
        CGContextRotateCTM(context, M_PI); // (2)
    [str drawAtPoint:CGPointMake(-size.width/2, -size.height/2) withFont:[UIFont fontWithName:@"Helvetica" size:12.0]];

    CGContextRestoreGState(context);
}

这个想法是将坐标系的原点移动到要绘制文本的矩形的中心(请参阅 参考资料(1))。然后您可以简单地将文本旋转 180 度(请参阅 参考资料(2))。

这是我的测试程序的输出:

在此处输入图像描述

于 2013-01-30T18:56:37.853 回答