对于我的应用程序的图形(线条图),将轴标签格式化为十分之一是没有意义的。没有提供自定义标签,看起来没有办法改变它。如何使用自定义标签在核心图上打勾?
我能够根据this answer中的示例代码添加自定义轴标签,但标签没有刻度标记。
这是一个问题(我没有看到任何东西here)还是我错过了什么?
对于我的应用程序的图形(线条图),将轴标签格式化为十分之一是没有意义的。没有提供自定义标签,看起来没有办法改变它。如何使用自定义标签在核心图上打勾?
我能够根据this answer中的示例代码添加自定义轴标签,但标签没有刻度标记。
这是一个问题(我没有看到任何东西here)还是我错过了什么?
如果您想使用不同于默认格式的数字标签,请创建一个NSNumberFormatter
对象,将其设置为您需要的任何格式,然后将其分配给轴上的labelFormatter
属性。
如果您需要将标签格式化为日期和/或时间,请查看CPTimeFormatter
类。
这对我有效!
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setMaximumFractionDigits:0];
y.labelFormatter = formatter;
派生一个类从NSNumberFormatter
(例如,MyFormatter
),并覆盖stringForObjectValue:
- (NSString *)stringForObjectValue:(NSDecimalNumber *)coordinateValue {
return @"MyLabel";
}
那么你轴线labelFormatter属性设置为MyFormatter
一个实例,如:
MyFormatter *formatter = [[MyFormatter alloc] init];
x.labelFormatter = formatter;
[formatter release];
我做了你的解释,但stringForObjectValue不叫... – Luc 2010-07-08 21:00:09
你也可以调整类似这样的方法:
#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
您好, 您是如何设法使用自定义标签获得某些刻度的?同样的问题在这里,自定义标签好,但没有滴答声。 谢谢,吕克 – Luc 2010-06-17 13:15:30