2014-11-20 3 views
0

У меня есть горизонтальная гистограмма с помощью Coreplot, в котором у меня есть метки внутри самой панели с белым текстом как этогоЭтикетировочной Гистограммы в CorePlot

Long Bar

Однако, когда бар находится в коротка, чтобы содержать ярлык я бы хотел, чтобы текст Черный и не был смещен так.

Short Bar

Есть ли что-нибудь доступно, чтобы проверить, если метка обрезается или сравнить широкий этикетки на длине стержня? До сих пор я это

-(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, как ожидалось.

ответ

1

Зная длину штанги (от xValue), вы можете использовать площадь участка, чтобы определить его размер на экране. После создания textLayer проверьте его границы size. Сравните эти два и решите, следует ли размещать ярлык внутри или снаружи панели.

+0

Спасибо Эрик, но у меня возникают трудности с размером экрана на панели, я отредактировал свой вопрос, чтобы включить мою последнюю попытку. – Cory

+0

Вам нужно вызвать '-plotAreaViewPointForPlotPoint: numberOfCoordinates:' дважды-один раз для базового значения и один раз для наконечника. Поскольку у вас есть горизонтальные полосы, используйте одно и то же значение y для обоих вызовов. Разница между координатами 'x' результирующих точек равна длине полосы в пикселях. –

+0

Вот и все! благодаря – Cory

Смежные вопросы