I developing an application in which i want to print the values on a line interval, for that i used NSArray with multiple objects and those object i passing into CGContextShowTextAtPoint() method. The code is.
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);
}
The above code is executed but it given me output is {oo, 1o,2o,...........11}, i want the output is {0,1,2,3...........11,12}. The above code given me one extra character "o" after single digit.I think the problem i meet near the parameters开发者_StackOverflow type casting of 5th parameter inside the method of CGContextShowTextAtpoint CGContextShowTextAtpoint(). How i resolve the problem of type casting for printing the objects of NSSArray in CGContextShowTextAtpoint() method??????????????
The problem is in your call to strlen
. Your (char *)
cast does not change the fact that it's an NSString *
.
You could change it like this:
const char *arrayDataForYAxis = [[hoursInDays objectAtIndex:intHoursInDays] UTF8String];
CGContextShowTextAtPoint(ctx, 10.0, y+20, arrayDataForYAxis, strlen(arrayDataForYAxis);
精彩评论