【问题标题】:Flip rotated text on CGContext在 CGContext 上翻转旋转的文本
【发布时间】:2013-01-30 15:14:03
【问题描述】:

图片: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);
}

感谢您的帮助!

【问题讨论】:

    标签: ios objective-c xcode cgcontext


    【解决方案1】:

    这应该会产生想要的输出:

    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))。

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

    【讨论】:

    • 这真是太棒了。如果可以的话,我会多次投票。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-16
    • 1970-01-01
    • 2012-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-04
    相关资源
    最近更新 更多