问题 如何在Core Plot中使用自定义标签打勾?


对于我的应用程序图形(线图),将轴标签格式化为十分之一没有意义。在没有提供自定义标签的情况下,似乎没有办法改变这种情况。

我能够根据示例代码添加自定义轴标签 这个答案,但标签没有刻度线。

这是一个问题(我没有看到任何东西 这里或者我错过了什么?


3453
2018-01-07 03:00


起源

你好,你是如何设法获得自定义标签的?同样的问题,自定义标签确定但没有滴答声。谢谢,吕克 - Luc


答案:


如果您希望数字标签的格式与默认格式不同,请创建一个 NSNumberFormatter 对象,将其设置为您需要的任何格式,并将其分配给 labelFormatter 轴上的属性。

看看 CPTimeFormatter class,如果您需要将标签格式化为日期和/或时间。


9
2018-01-07 04:03





从中派生一个班级 NSNumberFormatter (例如。 MyFormatter)并覆盖 stringForObjectValue:

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

然后将轴的labelFormatter属性设置为实例 MyFormatter,例如:

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

4
2018-06-19 21:41



我做了你解释的但是没有调用stringForObjectValue ... - Luc


这对我有用!

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

1
2018-05-28 13:54





你也可以像这样在类别中调整方法:

#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

0
2018-04-30 12:37