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

时间:2010-01-07 03:00:05

标签: iphone core-plot

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

我能够根据this answer中的示例代码添加自定义轴标签,但标签没有刻度线。

这是一个问题(我没有看到任何here)或我遗失了什么?

4 个答案:

答案 0 :(得分:9)

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

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

答案 1 :(得分:4)

NSNumberFormatter(例如MyFormatter)获取课程并覆盖stringForObjectValue:

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

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

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

答案 2 :(得分:1)

这对我有用!

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

答案 3 :(得分:0)

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

#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