2010-01-07 102 views
11

對於我的應用程序的圖形(線條圖),將軸標籤格式化爲十分之一是沒有意義的。沒有提供自定義標籤,看起來沒有辦法改變它。如何使用自定義標籤在覈心圖上打勾?

我能夠根據this answer中的示例代碼添加自定義軸標籤,但標籤沒有刻度標記。

這是一個問題(我沒有看到任何東西here)還是我錯過了什麼?

+0

您好, 您是如何設法使用自定義標籤獲得某些刻度的?同樣的問題在這裏,自定義標籤好,但沒有滴答聲。 謝謝,呂克 – Luc 2010-06-17 13:15:30

回答

9

如果您想使用不同於默認格式的數字標籤,請創建一個NSNumberFormatter對象,將其設置爲您需要的任何格式,然後將其分配給軸上的labelFormatter屬性。

如果您需要將標籤格式化爲日期和/或時間,請查看CPTimeFormatter類。

1

這對我有效!

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

派生一個類從NSNumberFormatter(例如,MyFormatter),並覆蓋stringForObjectValue:

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

那麼你軸線labelFormatter屬性設置爲MyFormatter一個實例,如:

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

我做了你的解釋,但stringForObjectValue不叫... – Luc 2010-07-08 21:00:09

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 
相關問題