我正在开发一个应用程序,其中我想在行间隔上打印值,因为我使用NSArray与多个对象和那些对象我传递到CGContextShowTextAtPoint()方法。代码是。
CGContextMoveToPoint(ctx, 30.0, 200.0);
CGContextAddLineToPoint(ctx, 30.0, 440.0);
NSArray *hoursInDays = [[NSArray alloc] initWithObjects:@"0",@"1",@"3",@"4",@"5",@"6",@"7",@"8",@"9",@"10",@"11",@"12", nil];
int intHoursInDays = 0;
for(float y = 400.0; y >= 200.0; y-=18, intHoursInDays++)
{
CGContextSetRGBStrokeColor(ctx, 2.0, 2.0, 2.0, 1.0);
CGContextMoveToPoint(ctx, 28, y);
CGContextAddLineToPoint(ctx, 32, y);
CGContextSelectFont(ctx, "Helvetica", 12.0, kCGEncodingMacRoman);
CGContextSetTextDrawingMode(ctx, kCGTextFill);
CGContextSetRGBFillColor(ctx, 0, 255, 255, 1);
CGAffineTransform xform = CGAffineTransformMake(
1.0, 0.0,
0.0, -1.0,
0.0, 0.0);
CGContextSetTextMatrix(ctx, xform);
NSString *arrayDataForYAxis = [hoursInDays objectAtIndex:intHoursInDays];
CGContextShowTextAtPoint(ctx, 10.0, y+20, [arrayDataForYAxis UTF8String], strlen((char *)arrayDataForYAxis));
CGContextStrokePath(ctx);
}
执行上面的代码,但它给出的输出是{oo,1o,2o,........... 11},我希望输出为{0,1,2,3 .. ......... 11,12}。 上面的代码在单个数字之后给了我一个额外的字符“o”。我认为我在CGContextShowTextAtpoint CGContextShowTextAtpoint()方法中的第5个参数的参数类型转换附近遇到的问题。我如何解决在CGContextShowTextAtpoint()方法中打印NSSArray对象的类型转换问题?????????????
答案 0 :(得分:1)
问题在于您致电strlen
。您的(char *)
广告投放不会改变它为NSString *
的事实。
您可以这样更改:
const char *arrayDataForYAxis = [[hoursInDays objectAtIndex:intHoursInDays] UTF8String];
CGContextShowTextAtPoint(ctx, 10.0, y+20, arrayDataForYAxis, strlen(arrayDataForYAxis);