Как я могу отмечать метки в Core Plot с помощью пользовательских ярлыков?

Для моего графика приложения (строки) нет смысла форматировать метки осей до десятых. Не похоже, что есть способ изменить это без предоставления пользовательских ярлыков.

Мне удалось добавить пользовательские метки осей на основе кода примера в этом ответе, но метки не имеют меток.

Это проблема (я ничего не видел здесь), или я что-то не хватает?

Ответ 1

Если вам нужны числовые метки с форматом, отличным от значения по умолчанию, создайте объект NSNumberFormatter, установите его в любом формате, который вам нужен, и назначьте его свойству labelFormatter на оси.

Проверьте класс CPTimeFormatter, если вам нужно отформатировать метки как даты и/или время.

Ответ 2

Вывести класс из NSNumberFormatter (например, MyFormatter) и переопределить stringForObjectValue:

- (NSString *)stringForObjectValue:(NSDecimalNumber *)coordinateValue {
    return @"MyLabel";
}

Затем установите для свойства labelFormatter вашей оси экземпляр MyFormatter, например:

MyFormatter *formatter = [[MyFormatter alloc] init];
x.labelFormatter = formatter;
[formatter release];

Ответ 3

Это сработало для меня!

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
[formatter setMaximumFractionDigits:0];  
y.labelFormatter = formatter; 

Ответ 4

Вы также можете подмешать метод в категории следующим образом:

#import "NSNumberFormatter+BigNumber.h"
#import <objc/runtime.h>

static Method origStringFromNumberMethod = nil;

@implementation NSNumberFormatter (BigNumber)

-(NSString *)stringFromBigNumber:(NSNumber*)number{
    int result = 0;
    int level = 1;
    NSString *format = @"";
    if([number integerValue] >= 1000000000) {
        level = 1000000000;
        format = @"b";
    }
    if([number integerValue] >= 1000000) {
        level = 1000000;
        format = @"m";
    }
    if([number integerValue] >= 1000){
        level = 1000;
        format = @"k";
    }
    result = [number integerValue]/level;

    NSString *kValue = [NSString stringWithFormat:@"%d%@",result,format];

    return kValue;
}

+ (void)initialize {
    origStringFromNumberMethod = class_getClassMethod(self, @selector(stringFromNumber:));
    method_exchangeImplementations(origStringFromNumberMethod,
                                   class_getClassMethod(self, @selector(stringFromBigNumber:)));
}

@end