У меня есть горизонтальная гистограмма с помощью Coreplot, в котором у меня есть метки внутри самой панели с белым текстом как этогоЭтикетировочной Гистограммы в CorePlot
Однако, когда бар находится в коротка, чтобы содержать ярлык я бы хотел, чтобы текст Черный и не был смещен так.
Есть ли что-нибудь доступно, чтобы проверить, если метка обрезается или сравнить широкий этикетки на длине стержня? До сих пор я это
-(CPTTextLayer *)dataLabelForPlot:(CPTPlot *)plot recordIndex:(NSUInteger)index
{
NSNumberFormatter *numberFormatter = [NSNumberFormatter percentFormatter];
NSDictionary *bar = [self.dataSource objectAtIndex:index];
NSDecimalNumber *xValue = [bar valueForKey:@"Value"];
NSString *stringLabel = [numberFormatter stringFromNumber:xValue];
CPTMutableTextStyle *whiteStyle = [[CPTMutableTextStyle alloc] init];
whiteStyle.color = [CPTColor whiteColor];
whiteStyle.fontSize = CPTFloat(12.0);
whiteStyle.fontName = @"HelveticaNeue-Medium";
CPTMutableTextStyle *darkStyle = [[CPTMutableTextStyle alloc] init];
darkStyle.color = [CPTColor blackColor];
darkStyle.fontSize = CPTFloat(12.0);
darkStyle.fontName = @"HelveticaNeue-Medium";
CPTTextLayer *textLayer = [[CPTTextLayer alloc] initWithText:stringLabel];
if (**isLabelClipped**) {
plot.labelOffset = 2.0f;
textLayer.textStyle = darkStyle;
} else {
plot.labelOffset = -2.0f;
textLayer.textStyle = whiteStyle;
}
return textLayer;
}
EDIT Как Эрик предложил я попытался получить размер экрана от plotspace, мое мышление было я бы использовать разницу между xValue и barsBase, поэтому я добавил следующий
NSDecimal plotPoint[2];
plotPoint[CPTCoordinateX] = xValue.decimalValue;
NSNumber *barBase = [self numberForPlot:plot
field:CPTBarPlotFieldBarBase
recordIndex:index];
plotPoint[CPTCoordinateY] = barBase.decimalValue;
CGPoint dataPoint = [plot.plotSpace plotAreaViewPointForPlotPoint:plotPoint numberOfCoordinates:2];
NSLog(@"Data Point:%@", NSStringFromPoint(dataPoint));
Но это дает значения как
{+531,46951532736807, 57,166666666666664}
Значение barBase (57 ..) выглядит как левое из области графика, а не ось 0, как ожидалось.
Спасибо Эрик, но у меня возникают трудности с размером экрана на панели, я отредактировал свой вопрос, чтобы включить мою последнюю попытку. – Cory
Вам нужно вызвать '-plotAreaViewPointForPlotPoint: numberOfCoordinates:' дважды-один раз для базового значения и один раз для наконечника. Поскольку у вас есть горизонтальные полосы, используйте одно и то же значение y для обоих вызовов. Разница между координатами 'x' результирующих точек равна длине полосы в пикселях. –
Вот и все! благодаря – Cory